如果某个元素有时作为 jsonobject 和 jsonarray 出现,如何解析 JSON
How to parse JSON if an element is coming as jsonobject sometime and jsonarray sometime
我收到来自服务的 json 响应。
对于一个元素,有时它以 json 数组的形式出现,有时它以 json 对象的形式出现。
示例:
Response 1:
{"_id":2,"value":{id: 12, name: John}}
Response 2:
{"_id":1,"value":[{id: 12, name: John}, {id: 22, name: OMG}]}
这里的值为json响应1中的对象和json响应2中的数组。
问题是我正在使用 Gson 来解析 json。并在我的 POJO class.
中将值保留为 ArrayList
public class ResponseDataset {
private int _id;
private ArrayList<Value> value;
// getter setter
}
public class Value {
private int id;
private String name;
// getter setter
}
有什么方法可以使用 Gson 来处理这个问题。我的 json 响应太大太复杂,所以想避免逐行解析。
即使我遇到了同样的问题,我也做了如下操作。
String jsonString = "{\"_id\":1,\"value\":[{id: 12, name: John}, {id: 22, name: OMG}]}";
JSONObject jsonObject = new org.json.JSONObject(jsonString);
ResponseDataset dataset = new ResponseDataset();
dataset.set_id(Integer.parseInt(jsonObject.getString("_id")));
System.out.println(jsonObject.get("value").getClass());
Object valuesObject = jsonObject.get("value");
if (valuesObject instanceof JSONArray) {
JSONArray itemsArray =(JSONArray) valuesObject;
for (int index = 0; index < itemsArray.length(); index++) {
Value value = new Value();
JSONObject valueObject = (JSONObject) itemsArray.get(index);
value.setId(Integer.parseInt(valueObject.getString("id")));
value.setName(valueObject.getString("name"));
dataset.getValue().add(value);
}
}else if(valuesObject instanceof JSONObject){
Value value = new Value();
value.setId(Integer.parseInt(((JSONObject)valuesObject).getString("id")));
value.setName(((JSONObject)valuesObject).getString("name"));
dataset.getValue().add(value);
}
你可以试试这个。
在这里找到解决方案
Gson handle object or array
@Pasupathi 你的解决方案也是正确的,但我想要一种使用 Gson 的方法,因为我的服务响应太大太复杂。
我收到来自服务的 json 响应。 对于一个元素,有时它以 json 数组的形式出现,有时它以 json 对象的形式出现。
示例:
Response 1:
{"_id":2,"value":{id: 12, name: John}}
Response 2:
{"_id":1,"value":[{id: 12, name: John}, {id: 22, name: OMG}]}
这里的值为json响应1中的对象和json响应2中的数组。
问题是我正在使用 Gson 来解析 json。并在我的 POJO class.
中将值保留为 ArrayListpublic class ResponseDataset {
private int _id;
private ArrayList<Value> value;
// getter setter
}
public class Value {
private int id;
private String name;
// getter setter
}
有什么方法可以使用 Gson 来处理这个问题。我的 json 响应太大太复杂,所以想避免逐行解析。
即使我遇到了同样的问题,我也做了如下操作。
String jsonString = "{\"_id\":1,\"value\":[{id: 12, name: John}, {id: 22, name: OMG}]}";
JSONObject jsonObject = new org.json.JSONObject(jsonString);
ResponseDataset dataset = new ResponseDataset();
dataset.set_id(Integer.parseInt(jsonObject.getString("_id")));
System.out.println(jsonObject.get("value").getClass());
Object valuesObject = jsonObject.get("value");
if (valuesObject instanceof JSONArray) {
JSONArray itemsArray =(JSONArray) valuesObject;
for (int index = 0; index < itemsArray.length(); index++) {
Value value = new Value();
JSONObject valueObject = (JSONObject) itemsArray.get(index);
value.setId(Integer.parseInt(valueObject.getString("id")));
value.setName(valueObject.getString("name"));
dataset.getValue().add(value);
}
}else if(valuesObject instanceof JSONObject){
Value value = new Value();
value.setId(Integer.parseInt(((JSONObject)valuesObject).getString("id")));
value.setName(((JSONObject)valuesObject).getString("name"));
dataset.getValue().add(value);
}
你可以试试这个。
在这里找到解决方案 Gson handle object or array
@Pasupathi 你的解决方案也是正确的,但我想要一种使用 Gson 的方法,因为我的服务响应太大太复杂。