Java 如何从JSON列表的JSON列表中获取数据
我的API中有一个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
[
{
"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;
}
}