簡體   English   中英

在Java中解析JSONObject時遇到問題

[英]Trouble with Parsing JSONObject in java

我在解析此特定JSONObject時遇到問題,

這是對象:

{"status":1,"dds":{"id":1,"name":"DDS1","description":"This is DDS 1","children":[{"id":2,"order":1,"type":1,"children":[{"id":3,"order":1,"type":3,"children":[]},{"id":4,"order":2,"type":2,"children":[]}]}]}}

該對象存儲在名為result的變量中,這是解析它的代碼:

JSONObject jsonObj = null;
JSONArray jsonArr = null;
try {
    jsonObj = new JSONObject(result);
    jsonArr = jsonObj.getJSONArray("dds");

} catch (JSONException e) { 
e.printStackTrace();
}

它給了我這個錯誤:

org.json.JSONException: Value {"id":1,"children":[{"type":1,"order":1,"id":2,"children":[{"type":3,"order":1,"id":3,"children":[]},{"type":2,"order":2,"id":4,"children":[]}]}],"description":"This is DDS 1","name":"DDS1"} at dds of type org.json.JSONObject cannot be converted to JSONArray

我試圖將其分解為子陣列。 我要去哪里錯了?

@愛先生

這是我對您的代碼的輸出

這是我對您的代碼的輸出

您正在調用jsonArr = jsonObj.getJSONArray("dds"); ,但是dds不是數組,它是JSON對象,如果格式化JSON,則可以清楚地看到它:

{
   "status":1,
   "dds":{
      "id":1,
      "name":"DDS1",
      "description":"This is DDS 1",
      "children":[
         {
            "id":2,
            "order":1,
            "type":1,
            "children":[
               {
                  "id":3,
                  "order":1,
                  "type":3,
                  "children":[

                  ]
               },
               {
                  "id":4,
                  "order":2,
                  "type":2,
                  "children":[

                  ]
               }
            ]
         }
      ]
   }
}

因此,您只需要調用JSONObject dds = jsonObj.getJSONObject("dds") ,如果您想要子級,則可以調用JSONArray children = jsonObj.getJSONObject("dds").getJSONArray("children");

private static final String json = "{\"status\":1,\"dds\":{\"id\":1,\"name\":\"DDS1\",\"description\":\"This is DDS 1\",\"children\":[{\"id\":2,\"order\":1,\"type\":1,\"children\":[{\"id\":3,\"order\":1,\"type\":3,\"children\":[]},{\"id\":4,\"order\":2,\"type\":2,\"children\":[]}]}]}}";

public static void main(String[] args) throws JSONException
{
    JSONObject jsonObj = new JSONObject(json);
    JSONObject dds = jsonObj.getJSONObject("dds");

    JSONArray children = dds.getJSONArray("children");
    System.out.println("Children:");
    System.out.println(children.toString(4));

    JSONArray grandChildren = children.getJSONObject(0).getJSONArray("children");
    System.out.println("Grandchildren:");
    System.out.println(grandChildren.toString(4));
}

產生:

Children:
[{
    "children": [
        {
            "children": [],
            "id": 3,
            "order": 1,
            "type": 3
        },
        {
            "children": [],
            "id": 4,
            "order": 2,
            "type": 2
        }
    ],
    "id": 2,
    "order": 1,
    "type": 1
}]
Grandchildren:
[
    {
        "children": [],
        "id": 3,
        "order": 1,
        "type": 3
    },
    {
        "children": [],
        "id": 4,
        "order": 2,
        "type": 2
    }
]

您可以這樣做,其中JsonElement可以是JSONobject或JsonArray或任何原始類型:

private JsonElement findElementsChildren(JsonElement element, String id) {
    if(element.isJsonObject()) {
        JsonObject jsonObject = element.getAsJsonObject();
        if(id.equals(jsonObject.get("id").getAsString())) {
            return jsonObject.get("children");
        } else {
            return findElementsChildren(element.get("children").getAsJsonArray(), id);
        }
    } else if(element.isJsonArray()) {
        JsonArray jsonArray = element.getAsJsonArray();
        for (JsonElement childElement : jsonArray) {
            JsonElement result = findElementsChildren(childElement, id);
            if(result != null) {
                return result;
            }
        }
    }

    return null;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM