Android 4 JSON生成错误:我可以使用比捆绑版本更新版本的org.JSON库吗?

时间:2016-05-19 08:20:17

标签: java android 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系统库总能获胜?

更新:事实证明,这不是JSON解析中的错误,而是JSON生成中的错误。该应用程序从Java MapList对象生成JSON - 在Android 4中导致错误的字符串输出: 更多细节在这里: http://fupeg.blogspot.co.nz/2011/07/android-json-bug.html

我通过编写以下两个函数解决了这个问题:

public static JSONObject mapToJSON(Map<String,Object> map){
    HashMap<String,Object> fixed = new HashMap<>();
    for (String key : map.keySet()){
        Object value = map.get(key);
        if (value instanceof Map){
            value = mapToJSON((Map<String,Object>) value);
        } else if (value instanceof List) {
            value = listToJSON((List<Object>)value);
        }
        fixed.put(key,value);
    }
    return new JSONObject(fixed);
}

public static JSONArray listToJSON(List<Object> list) {
    JSONArray result = new JSONArray();
    for (Object value : list){
        if (value instanceof Map){
            value = mapToJSON((Map<String,Object>) value);
        } else if (value instanceof List) {
            value = listToJSON((List<Object>)value);
        }
        result.put(value);
    }
    return result;
}

并替换应用中的所有电话

  • new JSONObject(someList)已替换为listToJSON(someList)
  • new JSONObject(someMap)已替换为mapToJSON(someMap)

问题仍然存在。如果我不必实施此解决方法,它可以更好地捆绑更新版本的org.json库,以便在Android 4.0上使用。有谁知道我怎么可能在Android上这样做?或者,如果不可能?

0 个答案:

没有答案
相关问题