1

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

我的错误在哪里?

4

1 回答 1

1

问题是您没有正确访问您的 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()vs. toString()- 如果你使用后者,你会得到原始 JSON,它将在值周围包含引号(例如输出将是"22"

于 2013-02-03T22:56:23.367 回答