Java 解析时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 }

我的json对象的格式是:

   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有什么区别-结果相同。。。