解析时JSON Object为null

时间:2013-02-03 22:38:21

标签: java android json gson

我的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;

我的错误在哪里?

1 个答案:

答案 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"