Java 解析时JSON对象为空
我的json对象的格式是:Java 解析时JSON对象为空,java,android,json,gson,Java,Android,Json,Gson,我的json对象的格式是: String jsonObjRecv = { "response":{ "respobj":{ "id":<int>, "number":<string>, "validated":<boolean> } }, "status":"ok", "errors":null }
String jsonObjRecv = {
"response":{
"respobj":{
"id":<int>,
"number":<string>,
"validated":<boolean>
}
},
"status":"ok",
"errors":null
}
在本例中,getString!=null,我可以接收数据,但当我尝试获取JSON对象的嵌套数据时,如下所示:
JSONObject jsonObjCont = new JSONObject(jsonObjRecv);
JSONObject regNumber = jsonObjCont.getJSONObject("respobj");
String number= regNumber.getString("number");
它不起作用
我尝试使用GSON library,但在以下情况下它可以工作:
public String parse(String jsonObjRecv) {
JsonElement jelement = new JsonParser().parse(jsonObjRecv);
String result = jelement.toString();
return result;
而且不工作:
public String parse(String jsonObjRecv) {
JsonElement jelement = new JsonParser().parse(jsonObjRecv);
JsonObject jobject = jelement.getAsJsonObject();
jobject = jobject.getAsJsonObject("respobj");
String result = jobject.get("number").toString();
return result;
我的错误在哪里?问题是您没有正确访问JSON对象-它是一个包含
响应的对象,它包含响应的对象
Gson
示例如下。注意代码中的注释-您需要获取响应
对象,然后从中获取响应
public static void main( String[] args )
{
String jsonObjRecv = "{\"response\":{\"respobj\":{\"id\":1,\"number\":\"22\",\"validated\":true}},\"status\":\"ok\",\"errors\":null}";
JsonElement jelement = new JsonParser().parse(jsonObjRecv);
JsonObject jobject = jelement.getAsJsonObject();
// Here is where you're making an error. You need to get the outer
// 'response' object first, then get 'respobj' from that.
jobject = jobject.getAsJsonObject("response").getAsJsonObject("respobj");
String result = jobject.get("number").getAsString();
System.out.println(result);
}
输出:
二十二
编辑以添加:注意:我使用了getAsString()
与toString()
-如果使用后者,您将获得原始JSON,其中将包括值周围的引号(例如,输出将是“22”
)问题在于您没有正确访问JSON对象-它是一个包含响应的对象,该对象包含respobj
对象
Gson
示例如下。注意代码中的注释-您需要获取响应
对象,然后从中获取响应
public static void main( String[] args )
{
String jsonObjRecv = "{\"response\":{\"respobj\":{\"id\":1,\"number\":\"22\",\"validated\":true}},\"status\":\"ok\",\"errors\":null}";
JsonElement jelement = new JsonParser().parse(jsonObjRecv);
JsonObject jobject = jelement.getAsJsonObject();
// Here is where you're making an error. You need to get the outer
// 'response' object first, then get 'respobj' from that.
jobject = jobject.getAsJsonObject("response").getAsJsonObject("respobj");
String result = jobject.get("number").getAsString();
System.out.println(result);
}
输出:
二十二
编辑以添加:注意:我使用了getAsString()
与toString()
-如果使用后者,您将获得原始JSON,其中将包括围绕值的引号(例如,当您说它不起作用时,输出将是“22”
)?您是否得到异常或意外的输出?你能显示真正的JSON输入吗?@AnuragKapur-你刚刚链接到一个古老版本的Gson
@AnuragKapur有什么不同?结果是一样的……当你说它不起作用时,会发生什么?您是否得到异常或意外的输出?你能显示真正的JSON输入吗?@AnuragKapur-你刚刚链接到一个古老版本的Gson
@AnuragKapur有什么区别-结果相同。。。