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

Java 如何从JSON列表的JSON列表中获取数据,java,json,list,dictionary,gson,Java,Json,List,Dictionary,Gson,我的API中有一个JSON字符串,如下所示: [ { "id": "abc", "data": { "Name": "Peter", "Date": "2017/12/01" } }, { "id": "def", "data": { "Name": "Tina", "Date": "2017/1

我的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"
        }

    }
]
Type type = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> myMap = gson.fromJson(str, type);
然后,我使用(java):

如果我调用result.get(0.get(“id”).toString(); 然后它回来了

abc

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

{Name=Peter, Date=2017/12/01}
最后,我想获取“Name”信息,但当我尝试将此字符串转换为Map时,它会导致一些问题,代码如下所示:

[
    {
        "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"
        }

    }
]
Type type = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> myMap = gson.fromJson(str, type);
Type Type=new-TypeToken(){}.getType();
Map myMap=gson.fromJson(str,type);
这不管用。我发现字符串可能不是JSON的一般类型,它类似于“Name=Peter,Date=2017/12/01”,但它需要“Name”:“Peter”,“Date”:“2017/12/01”,对吗?这就是问题所在吗?如何获取姓名数据?有人能帮我吗

更新:
我发现如果“Name”=”,那么我无法将其作为字符串类型获取,我无法使用“data.get(“Name”);”。但我仍然需要它。有人能修好吗?谢谢。

首先,您的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"));
Gson-Gson=new-Gson();
Type resultType=new-TypeToken(){}.getType();
List result=gson.fromJson(信息,结果类型);
System.out.println(result.get(0.get(“data”).toString());
JsonObject data=result.get(0.get(“数据”).getAsJsonObject();
System.out.println(data.get(“Name”);

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

如果您使用的是Gson,则不需要手动解析。看看如何-
Data.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;
    }
}
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类?这里有几个网站。还有很多Android Studio插件可用,我使用

为什么你的约会以逗号结尾?我认为JSON不会以逗号结尾——谢谢你,它起作用了,但我还有一个问题。如果“Name=”,那么它就像{Name=},我仍然需要这个信息。我尝试使用“if(data.get(“Name”)==null)”,但它不起作用,你知道如何解决这个问题吗?刚刚意识到你的初始json是有效的,所以请检查我更新的我的答案。你写的前一个可以起作用,只是问题是如果没有值,它无法运行data.get(“Name”).toString()。我希望它返回“”。你更新的这个无法运行,我的应用程序终止了,我不知道为什么。我重新检查了它,它运行了。如果对你有效,请将此标记为已接受答案。
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;
    }
}