我从我的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“);”。但是我仍然需要它。任何人都可以修复它吗?谢谢。
答案 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)
答案 2 :(得分:0)
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 。