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 MapList对象生成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上这样做? 或者如果不可能的话?