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

Java Android 4 JSON生成错误:我可以使用比捆绑版本更新的org.JSON库吗?,java,android,json,org.json,Java,Android,Json,Org.json,我有一个Android应用程序,它在某些地方生成JSON,序列化它,然后在稍后的时间反序列化它并使用数据。我正在使用Android 5和更高版本上的内置JSONObject,它可以查看org.json包 我的应用程序在所有安卓5.0和更新的设备上运行良好,但在安卓4.x上它在某些地方失败。在调试器中,反序列化的JSONObject看起来有些不完整 这似乎是旧版android附带的JSON库中的某种错误,我只想使用MavenCentral或JCenter提供的最新版本 我该怎么做?我补充说 com

我有一个Android应用程序,它在某些地方生成JSON,序列化它,然后在稍后的时间反序列化它并使用数据。我正在使用Android 5和更高版本上的内置JSONObject,它可以查看org.json包

我的应用程序在所有安卓5.0和更新的设备上运行良好,但在安卓4.x上它在某些地方失败。在调试器中,反序列化的JSONObject看起来有些不完整

这似乎是旧版android附带的JSON库中的某种错误,我只想使用MavenCentral或JCenter提供的最新版本

我该怎么做?我补充说

compile 'org.json:json:20160212'
到我的应用程序的build.gradle dependencies部分,但它似乎没有任何区别

这是可能的,还是旧的android系统库总是赢


更新:这不是JSON解析中的错误,而是JSON生成中的错误。应用程序正在从Java
Map
List
对象生成JSON,这在Android 4中会导致不正确的字符串输出: 详情如下:

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

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;
}
publicstaticjsonobjectmaptojson(映射映射){
HashMap fixed=新HashMap();
for(字符串键:map.keySet()){
对象值=map.get(键);
if(映射的值实例){
value=mapToJSON((Map)值);
}else if(列表的值实例){
value=listToJSON((列表)值);
}
固定。放置(键、值);
}
返回新的JSONObject(固定);
}
公共静态JSONArray listToJSON(列表){
JSONArray结果=新的JSONArray();
用于(对象值:列表){
if(映射的值实例){
value=mapToJSON((Map)值);
}else if(列表的值实例){
value=listToJSON((列表)值);
}
结果。put(值);
}
返回结果;
}
并替换应用程序中的所有呼叫

  • newjsonobject(someList)
    替换为
    listToJSON(someList)
  • 新JSONObject(someMap)
    替换为
    mapToJSON(someMap)

但问题仍然存在。如果我不必实现这种变通方法,而是可以捆绑一个较新版本的
org.json
库在Android 4.0上使用,那就更好了。有人知道我如何在Android上做到这一点吗?或者如果不可能的话?

你能粘贴两个解析对象(Android 5和4)中的差异吗?从来没有听说过这样的问题。它是如何失败的,失败的原因是什么?请求还是解析?结果不是JSON解析器中的错误,而是从Java映射和列表生成JSON时的错误。这个应用程序在一个地方生成JSON,然后在另一个地方解析它(是的,这在表面上是没有意义的,但有一个很好的理由)这里提到了这个bug:可能是重复的。你能粘贴两个解析对象(Android 5和Android 4)的差异吗?从来没有听说过这样的问题。它是如何失败的,失败的原因是什么?请求还是解析?结果不是JSON解析器中的错误,而是从Java映射和列表生成JSON时的错误。应用程序在一个地方生成JSON,然后在另一个地方解析它(是的,这在表面上没有意义,但有一个很好的理由)这里提到了这个bug:可能是