我的json对象的格式是:
String jsonObjRecv = {
"response":{
"respobj":{
"id":<int>,
"number":<string>,
"validated":<boolean>
}
},
"status":"ok",
"errors":null
}
代码为:
JSONObject jsonObjCont = new JSONObject(jsonObjRecv);
String getString= jsonObjCont.toString(2);
在这种情况下getString!= null我可以接收数据,但是当我尝试获取JSON对象的嵌套数据时:
JSONObject jsonObjCont = new JSONObject(jsonObjRecv);
JSONObject regNumber = jsonObjCont.getJSONObject("respobj");
String number= regNumber.getString("number");
它不起作用。
我尝试使用GSON库,但它适用于:
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;
我的错误在哪里?
答案 0 :(得分:0)
问题是您没有正确访问JSON对象 - 它是一个包含response
对象的对象,该对象包含respobj
对象。
Gson
示例如下。请注意代码中的注释 - 您需要获取response
对象然后从中获取respobj
。
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);
}
输出:
22
编辑以添加:注意我使用了getAsString()
与toString()
- 如果您使用后者,则会获得原始JSON,其中包含值周围的引号(例如输出将是"22"
)