我在Android代码中遇到一个奇怪的问题,当我试图将Json-smart JSONObject
或JSONArray
作为可序列化数据传递给Intent serializable extra时。 Json-smart是非常快速和精益的JSON解析器实现,我强烈推荐它。 JSONObject
延伸HashMap<String, Object>
和JSONArray
延伸ArrayList<Object>
与很少的开销。这些对象的虚空覆盖Object#write
或Object#read
Android - json-smart反序列化问题
这里的问题:
如果我用说Fragment#onSaveInstanceState(String, JSONObject)
一切工作就好了这些对象。如果我在普通的Java示例项目中序列化/反序列化这些对象,它再次按预期工作。但是,如果我用Intent#putExtra(String, JSONObject)
,然后尝试做
JSONObject json = (JSONObject) intent.getSerializableExtra("JSON");
让我的JSONObject我会得到ClassCastException
因为什么方法返回的是一个普通的HashMap
(JSONArray,并在情况下,它的ArrayList)。此外,如果我看地图/阵列中的内容被完全剥离到的JSONObject/JSONArray任何引用,并包含HashMap /的ArrayList
我filed the ticket更换和提供的示例项目,但遗憾的是笔者关闭了它,但未得到解决,所以我干脆试图达到它的底部。如果你去的票,它有简单的项目附加。
有没有办法呢?现在我要的JSONObject或JSONArray转换为字符串,并重新分析这回对象,如:
JSONArray feeds = (JSONArray) JSONValue.parse(intent.getStringExtra(RAW_FEED));
fyi,'JSONObject json = new JSONObject(intent.getSerializableExtra(“JSON”))'应该只是花花公子。 – Jens
@Jens这不起作用(至少完全)。是的 - 你会得到外部JSONObject,但所有内部结构将是纯HashMaps和ArrayLists。我只是通过修改和执行门票 – Bostone
中包含的测试项目来验证这一点。 JSON对象可以从HashMap构建,实际上是一个HashMap。 –