[英]How do I parse this json string using GSON correctly. JsonObject is returning empty with no parse errors
I have a data structure as follows我有一个数据结构如下
{"testString":"some string","success":true,"reason":null,"data":{"networks":[{"networkId":"1","networkName":"some area","networkType":1},{"networkId":"4","networkName":"another place","networkType":1}]}} {"testString":"some string","success":true,"reason":null,"data":{"networks":[{"networkId":"1","networkName":"some area", "networkType":1},{"networkId":"4","networkName":"another place","networkType":1}]}}
So basically it's an array object with the first thee key/value pairs being a 1)String 2)Bool 3)String and the fourth is a JSONObject所以基本上它是一个数组 object,第一个键/值对是 1)String 2)Bool 3)String,第四个是 JSONObject
The Object i'm using as a container for all this data is我用作所有这些数据的容器的 Object 是
public class ContainerData {
private boolean success;
private String reason;
private JSONObject data;
private String testString;
public String getTestString(){
return this.testString;
}
public void setTestString(String test){
this.testString = test;
}
public boolean getSuccess() {
return this.success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getReason() {
return this.reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public JSONObject getData() {
return this.data;
}
public void setData(JSONObject data) {
this.data = data;
}
}
I parse it like this withr esponse object being the json string我像这样解析它,响应 object 是 json 字符串
Gson gson = new GsonBuilder().serializeNulls().create();
responseObject = gson.fromJson(response,ContainerData.class);
I can get values for everything except the JSONObject it always returns an empty array like {} Any thoughts on where I'm messing up?我可以获取除 JSONObject 之外的所有内容的值,它总是返回一个空数组,如 {} 关于我搞砸的地方有什么想法吗?
Here's an approach that works with the JSON input you provided, but more "fully" deserializes into a friendly data structure.这是一种适用于您提供的 JSON 输入的方法,但更“完全”反序列化为友好的数据结构。
The output is output 是
[ContainerData: success=true, reason=null, testString=some string, data=[Data: networks=[ [Network: networkId=1, networkName=some area, networkType=1], [Network: networkId=4, networkName=another place, networkType=1] ]]]
public class Foo
{
static String jsonInput =
"{" +
"\"testString\":\"some string\"," +
"\"success\":true," +
"\"reason\":null," +
"\"data\":" +
"{" +
"\"networks\":" +
"[" +
"{\"networkId\":\"1\",\"networkName\":\"some area\",\"networkType\":1}," +
"{\"networkId\":\"4\",\"networkName\":\"another place\",\"networkType\":1}" +
"]" +
"}" +
"}";
public static void main(String[] args)
{
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
ContainerData container = gson.fromJson(jsonInput, ContainerData.class);
System.out.println(container);
}
}
class ContainerData
{
private boolean success;
private String reason;
private String testString;
private Data data;
@Override
public String toString()
{
return String.format(
"[ContainerData: success=%1$b, reason=%2$s, testString=%3$s, data=%4$s]",
success, reason, testString, data);
}
}
class Data
{
private Network[] networks;
@Override
public String toString()
{
return String.format(
"[Data: networks=%1$s]",
Arrays.toString(networks));
}
}
class Network
{
private String networkId;
private String networkName;
private int networkType;
@Override
public String toString()
{
return String.format(
"[Network: networkId=%1$s, networkName=%2$s, networkType=%3$d]",
networkId, networkName, networkType);
}
}
I have parsed the JSON string you have mentioned above.我已经解析了您上面提到的 JSON 字符串。 It is not using the GSON to parse the JSON.
它没有使用 GSON 来解析 JSON。 Please try this also.
请也试试这个。 I think it will sove your issue:
我认为它将解决您的问题:
String jsonString = "{\"testString\":\"some string\",\"success\":true,\"reason\":null,\"data\":{\"networks\":[{\"networkId\":\"1\",\"networkName\":\"some area\",\"networkType\":1},{\"networkId\":\"4\",\"networkName\":\"another place\",\"networkType\":1}]}}";
JSONObject jObject = new JSONObject(jsonString);
String menuObject = jObject.getString("testString");
System.out.println("testString="+menuObject);
String menuObject1 = jObject.getString("success");
System.out.println("success="+menuObject1);
String menuObject2 = jObject.getString("reason");
System.out.println("reason="+menuObject2);
String menuObject3 = jObject.getString("data");
System.out.println("data="+menuObject3);
JSONObject popupObject = jObject.getJSONObject("data");
JSONArray jObject1 = popupObject.getJSONArray("networks");
for (int i = 0; i < 2; i++) {
System.out.println("networkId of"+" "+i+" th element= "+jObject1.getJSONObject(i).getString("networkId").toString());
System.out.println("networkName of"+" "+i+" th element= "+jObject1.getJSONObject(i).getString("networkName").toString());
System.out.println("networkType of"+" "+i+" th element= "+jObject1.getJSONObject(i).getString("networkType").toString());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.