【问题标题】:Converting Json to Pojo将 Json 转换为 Pojo
【发布时间】:2014-07-21 13:41:02
【问题描述】:

我最近决定重写我的一个较旧的 android 应用程序,但我不知道如何像这样转换服务器响应:

{
    "response": "SUCCESS",
    "data": {
        "0": {
            ... fields ... 
        },
        "1": {
            ... fields ...

        },
        ... another objects
    }
}

到普通的 java 对象(或者在这种情况下是对象列表)。我以前使用过这种方法:

    JSONObject response = new JSONObject(stringResponse);
    JSONObject dataList = response.getJSONObject("data");
    int i = 0;
    while (true) {
        dataList.getJSONObject(String.valueOf(i)); // here I get wanted object
        i++;
    }

获取相关对象,然后我可以将它们放入 List,但现在我正在使用 Retrofit 库,我无法找到任何干净的解决方案来使用 gson 和改造。

感谢您的帮助。

编辑:我想要什么:

像这样使用改造发送请求:

@GET("/some params")
void restCall(... another params..., Callback<Response> callback);

然后在 Response 对象中有对象列表。我不知道的是如何声明 Response 对象,这样它就可以将那个奇怪的响应转换为普通的对象列表。

【问题讨论】:

  • 我会推荐使用json序列化库,比如google gson
  • 我已经提到我正在使用 gson,但我不知道如何解析那个奇怪的结构。您通常会得到对象数组,而不是像 map 那样的 "1":{},"2":{},...我只是不知道如何解析这个

标签: java android json gson retrofit


【解决方案1】:

你周围有很多图书馆。我用的一个是json-simple你可以使用:

JSONValue.parse(String);

【讨论】:

    【解决方案2】:

    也研究一下 gson!我将它用于我的所有项目,对 pojos 进行序列化和反序列化非常简单且可自定义(如果需要,大多数东西都可以开箱即用) gson

    这是他们的第一个例子:

    class BagOfPrimitives {
      private int value1 = 1;
      private String value2 = "abc";
      private transient int value3 = 3;
      BagOfPrimitives() {
        // no-args constructor
      }
    }
    
    BagOfPrimitives obj = new BagOfPrimitives();
    Gson gson = new Gson();
    String json = gson.toJson(obj);  
    ==> json is {"value1":1,"value2":"abc"}
    obj = gson.fromJson( json ); 
    ==> you get back the same object
    

    【讨论】:

    • 你读过这个问题吗?它是 POJO 的 JSON,而不是相反!
    • gson 也一样。我也添加了 fromJson 命令。
    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2023-02-02
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多