【问题标题】:How to get the data from the JSON list of JSON list如何从 JSON 列表的 JSON 列表中获取数据
【发布时间】:2019-01-15 05:18:08
【问题描述】:

我的 API 中有一个 JSON 字符串,如下所示:

[
    {
        "id": "abc",
        "data": {
            "Name": "Peter",
            "Date": "2017/12/01"

        }
    },
    {
        "id": "def",
        "data": {
            "Name": "Tina",
            "Date": "2017/12/20"
        }

    },
    {
        "id": "ghi",
        "data": {
            "Name": "Amy",
            "Date": "2017/12/16"
        }

    }
]

然后,我使用(java):

Gson gson = new Gson();
Type resultType = new TypeToken<List<Map<String, Object>>>() {
            }.getType();
List<Map<String, Object>> result = gson.fromJson(info, resultType); 

如果我调用 result.get(0).toString()); 然后它返回:

{id=abc, data={Name=Peter, Date=2017/12/01}}

如果我调用 result.get(0).get("id").toString(); 然后它返回了

abc

现在我想获取“数据”的数据,当我调用 result.get(0).get("data").toString(); 然后它返回了

{Name=Peter, Date=2017/12/01}

最后我想得到“名称”的信息,但是当我试图将这个字符串转换为地图时,它会导致一些问题,代码是这样的:

Type type = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> myMap = gson.fromJson(str, type);

这不起作用。我发现可能字符串不是JSON的一般类型,它就像“Name=Peter,Date=2017/12/01”,但它需要“Name”:“Peter”,“Date”:“2017/12 /01" 对吧?那是问题吗?如何获取名称的数据?谁能帮帮我?

更新: 我发现如果"Name" = "",那么我不能把它作为字符串类型,我不能使用"data.get("Name");"。但我仍然需要它。任何人都可以修复它吗?谢谢。

【问题讨论】:

标签: java json list dictionary gson


【解决方案1】:

首先,您的 JSON 格式不正确,它不应该在日期之后有逗号。 并回答您的问题,根本不要使用地图。

如果您真的想在不创建模型和其他类的情况下这样做,请这样做:

Gson gson = new Gson();
Type resultType = new TypeToken<List<JsonObject>>() {}.getType();
List<JsonObject> result = gson.fromJson(info, resultType);
System.out.println(result.get(0).get("data").toString());
JsonObject data = result.get(0).get("data").getAsJsonObject();
System.out.println(data.get("Name"));

【讨论】:

  • 谢谢它成功了,但我遇到了另一个问题。如果 "Name" = "",那么它会像 {Name=},我仍然需要此信息。我尝试使用 "if (data.get("Name")==null)" 但它不起作用,你知道如何解决这个问题吗?
  • 刚刚意识到您的初始 json 是有效的,所以请检查我更新的答案。
  • 你写的上一个可以工作,只是如果它没有值它无法运行 data.get("Name").toString() 的问题。我希望它返回“”。而你更新的这个不能工作,我的应用程序终止,我不知道为什么。
  • 我仔细检查了它并且它有效。如果对您有用,请将其标记为已接受的答案。
【解决方案2】:

如果您使用的是 Gson,则不需要手动解析。看看如何-

List<Response> responseList = new Gson().fromJson(yourJson, new TypeToken<List<Response>>() {
    }.getType());
Data data = responseList.get(0).getData();
String id = responseList.get(0).getId();
String date = data.getDate();
String name = data.getName();

这不是魔法吗? 根本不需要手动解析。

Response.java

public class Response {
    private Data data;
    private String id;

    public void setData(Data data) {
        this.data = data;
    }

    public Data getData() {
        return data;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }
}

Data.java

public class Data {
    private String date;
    private String name;

    public void setDate(String date) {
        this.date = date;
    }

    public String getDate() {
        return date;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

如何生成 Pojo 类? 那么这里有几个网站jsonschema2pojo。还有很多可用的 Android Studio 插件,我使用 RoboPOJOGenerator

【讨论】:

    【解决方案3】:

    您可以直接将响应转换为 POJO/Model 类。检查thisthis

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 2018-11-29
      • 2012-01-29
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2012-09-18
      • 1970-01-01
      相关资源
      最近更新 更多