如何从JSON列表的JSON列表中获取数据

时间:2018-08-08 03:32:31

标签: java json list dictionary gson

我从我的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();时,我想获取“ data”的数据。 然后它返回了

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

最后,我想获取“名称”信息,但是当我尝试将此字符串转换为Map时,这会导致一些问题,代码如下:

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“);”。但是我仍然需要它。任何人都可以修复它吗?谢谢。

3 个答案:

答案 0 :(得分:0)

首先,您的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"));

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果使用的是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