Gson-将JSON对象的JSON数组解析为ArrayList <org.json.JSONObject>

拉吉

我有一个像这样的JSON字符串:

{
  "r": [
    {
      "pic": "1.jpg",
      "name": "Name1"
    },
    {
      "pic": "2.jpg",
      "name": "Name2"
    },
    {
      "pic": "3.jpg",
      "name": "Name3"
    }
  ]
}

我想解析这个POJO模型:

public class Catalog {
    @SerializedName("r")
    @Expose
    private List<JSONObject> r = new ArrayList<JSONObject>();

    public List<JSONObject> getR() {
        return r;
    }

    public void setR(List<JSONObject> r) {
        this.r = r;
    }
}

我正在这样解析:

Catalog cat = new Gson().fromJson(jsonString,Catalog.class);

但最后得到这个json

{
  "r": [
    {
      "nameValuePairs": {}
    },
    {
      "nameValuePairs": {}
    },
    {
      "nameValuePairs": {}
    }
  ]
}

请注意,我不想使用com.google.gson.JsonObject我要用org.json.JSONObject因为几乎我所有的代码都使用它,如何实现它?

柳博米尔·谢达里夫(Lyubomyr Shaydariv)

正如在其他答案和评论中已经提到的那样,org.json.JSONObject由于多种原因,您可能真的不想使用但是,如果这对您来说是必须的,则只需创建您的org.json.JSONObject-awareGson实例。

final class JSONObjectJsonDeserializer
        implements JsonDeserializer<JSONObject> {

    // The implementation is fully thread-safe and can be instantiated once
    private static final JsonDeserializer<JSONObject> jsonObjectJsonDeserializer = new JSONObjectJsonDeserializer();

    // Type tokens are immutable values and therefore can be considered constants (and final) and thread-safe as well
    private static final TypeToken<Map<String, Object>> mapStringToObjectTypeToken = new TypeToken<Map<String, Object>>() {
    };

    private JSONObjectJsonDeserializer() {
    }

    static JsonDeserializer<JSONObject> getJsonObjectJsonDeserializer() {
        return jsonObjectJsonDeserializer;
    }

    @Override
    public JSONObject deserialize(final JsonElement jsonElement, final Type type, final JsonDeserializationContext context) {
        // Convert the input jsonElement as if it were a Map<String, Object> (a generic representation for JSON objectS)
        final Map<String, Object> map = context.deserialize(jsonElement, mapStringToObjectTypeToken.getType());
        // And forward the map to the JSONObject constructor - it seems to accept it nice
        return new JSONObject(map);
    }

}

Gson 被设计为线程安全的,不需要在每次需要序列化或反序列化时都实例化:

private static final Gson gson = new GsonBuilder()
        .registerTypeAdapter(JSONObject.class, getJsonObjectJsonDeserializer())
        .create();

最后:

final Catalog catalog = gson.fromJson(jsonString, Catalog.class);
out.println(catalog.getR());

结果如下:

[{“ name”:“ Name1”,“ pic”:“ 1.jpg”},{“ name”:“ Name2”,“ pic”:“ 2.jpg”},{“ name”:“ Name3”, “ pic”:“ 3.jpg”}]

无论如何,我建议您重新设计映射模型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Gson将长度为1的json数组解析为JsonArray对象而不是JsonObject对象

来自分类Dev

如何使用GSON WHen对象解析JSON是JSONObject还是JSONArray

来自分类Dev

如何使用GSON WHen对象解析JSON是JSONObject还是JSONArray

来自分类Dev

org.json.JSONObject与javax.json.JsonObject吗?

来自分类Dev

java.lang.NoClassDefFoundError:org / json / JSONObject

来自分类Dev

Android:org.json.jsonobject值

来自分类Dev

NoClassDefFoundError:org / json / JSONObject-Hadoop MapReduce

来自分类Dev

找不到org.json.simple.JSONObject

来自分类Dev

使用GSON解析json对象与json数组

来自分类Dev

无法将类型为org.json.JSONObject $ 1的值null转换为JSONObject

来自分类Dev

Gson 无法将位于 json 对象中的 json 数组字符串解析为 JsonArray

来自分类Dev

Android Studio无法解析导入org.json.JSONObject

来自分类Dev

类型不匹配:无法从org.codehaus.jettison.json.JSONObject转换为org.json.JSONObject

来自分类Dev

Android JSON解析“无法将org.json.JSONObject类型的数据转换为JSONArray”错误

来自分类Dev

JSONObject用gson解析

来自分类Dev

在JSONObject(org.json)中找不到嵌套数组

来自分类Dev

如何使用JSONObject(org.json)获取嵌套数组

来自分类Dev

来自Json的GSON与复杂的JSONObject不起作用

来自分类Dev

JSON 到 Gson - 值无法转换为 JSONObject7

来自分类Dev

如何使用GSON将json对象数组解析为JAVA二维数组?

来自分类Dev

org.json.simple.JSONObject 的编码问题 - 将 ★ 变成 ★...

来自分类Dev

Java Glassfish-Server Json NoClassDefFoundError: org/json/JSONObject

来自分类Dev

使用GSON将JSON解析为Java对象

来自分类Dev

使用 GSON 将 JSON 嵌套对象解析为 Java POJO

来自分类Dev

使用 GSON 将 JSON 数据解析为数组时出错

来自分类Dev

org.json.JSONException:无法将 org.json.JSONArray 类型的值 [{}] 转换为 JSONObject

来自分类Dev

使用哪一个?org.json中的JSONObject与javax.json中的JsonObject

来自分类Dev

JSONObject中的嵌套数组返回为空(org.json)

来自分类Dev

通过Gson将JsonObject解析为对象列表

Related 相关文章

  1. 1

    Gson将长度为1的json数组解析为JsonArray对象而不是JsonObject对象

  2. 2

    如何使用GSON WHen对象解析JSON是JSONObject还是JSONArray

  3. 3

    如何使用GSON WHen对象解析JSON是JSONObject还是JSONArray

  4. 4

    org.json.JSONObject与javax.json.JsonObject吗?

  5. 5

    java.lang.NoClassDefFoundError:org / json / JSONObject

  6. 6

    Android:org.json.jsonobject值

  7. 7

    NoClassDefFoundError:org / json / JSONObject-Hadoop MapReduce

  8. 8

    找不到org.json.simple.JSONObject

  9. 9

    使用GSON解析json对象与json数组

  10. 10

    无法将类型为org.json.JSONObject $ 1的值null转换为JSONObject

  11. 11

    Gson 无法将位于 json 对象中的 json 数组字符串解析为 JsonArray

  12. 12

    Android Studio无法解析导入org.json.JSONObject

  13. 13

    类型不匹配:无法从org.codehaus.jettison.json.JSONObject转换为org.json.JSONObject

  14. 14

    Android JSON解析“无法将org.json.JSONObject类型的数据转换为JSONArray”错误

  15. 15

    JSONObject用gson解析

  16. 16

    在JSONObject(org.json)中找不到嵌套数组

  17. 17

    如何使用JSONObject(org.json)获取嵌套数组

  18. 18

    来自Json的GSON与复杂的JSONObject不起作用

  19. 19

    JSON 到 Gson - 值无法转换为 JSONObject7

  20. 20

    如何使用GSON将json对象数组解析为JAVA二维数组?

  21. 21

    org.json.simple.JSONObject 的编码问题 - 将 ★ 变成 ★...

  22. 22

    Java Glassfish-Server Json NoClassDefFoundError: org/json/JSONObject

  23. 23

    使用GSON将JSON解析为Java对象

  24. 24

    使用 GSON 将 JSON 嵌套对象解析为 Java POJO

  25. 25

    使用 GSON 将 JSON 数据解析为数组时出错

  26. 26

    org.json.JSONException:无法将 org.json.JSONArray 类型的值 [{}] 转换为 JSONObject

  27. 27

    使用哪一个?org.json中的JSONObject与javax.json中的JsonObject

  28. 28

    JSONObject中的嵌套数组返回为空(org.json)

  29. 29

    通过Gson将JsonObject解析为对象列表

热门标签

归档