Android 4 JSON生成错误:我可以使用比捆绑版本更新版本的org.JSON库吗?
我有一个Android应用程序,在某些地方生成JSON,串行化,然后在以后反序列化并使用数据。 我正在使用内置的JSONObject在Android 5及更高版本上查看org.json包。
我的应用程序在所有Android 5.0和更新的设备上运行良好,但在Android 4.x上它在某些地方失败了。 在调试器中查看反序列化的JSONObject看起来有点破碎。
这似乎是JSON库中的一些错误,它附带了较旧的android,我想简单地使用MavenCentral或JCenter的更新版本
我该怎么做呢? 我已经添加
compile 'org.json:json:20160212'
到我的应用程序的build.gradle依赖项部分,但它似乎没有任何区别。
这是可能的还是旧的破坏的android系统库总能获胜?
更新:事实certificate,这不是JSON解析中的错误,而是JSON生成中的错误。 该应用程序从Java Map
和List
对象生成JSON – 在Android 4中导致错误的字符串输出:更多详细信息: http : //fupeg.blogspot.co.nz/2011/07/android-json-bug.html
我通过编写以下两个函数解决了这个问题:
public static JSONObject mapToJSON(Map map){ HashMap fixed = new HashMap(); for (String key : map.keySet()){ Object value = map.get(key); if (value instanceof Map){ value = mapToJSON((Map) value); } else if (value instanceof List) { value = listToJSON((List)value); } fixed.put(key,value); } return new JSONObject(fixed); } public static JSONArray listToJSON(List list) { JSONArray result = new JSONArray(); for (Object value : list){ if (value instanceof Map){ value = mapToJSON((Map) value); } else if (value instanceof List) { value = listToJSON((List)value); } result.put(value); } return result; }
并替换应用程序中的所有调用
-
new JSONObject(someList)
替换为listToJSON(someList)
-
new JSONObject(someMap)
替换为mapToJSON(someMap)
问题仍然存在。 如果我不必实现这种解决方法,那就更好了,而是可以捆绑更新版本的org.json
库,以便在Android 4.0上使用。 有谁知道我怎么可能在Android上这样做? 或者如果不可能的话?