简体   繁体   中英

How to do Parsing JSON string in Java with nested arrays

Starting from the similar question, Nested JSON Array in Java I have a somewhat odd json as a response from a REST api(POST) call. I need to find out the id and name of the sub_items array in each items array element.

I tried like given below for which I am getting error like

org.json.JSONException: JSONObject["items.sub_items"] not found.

I also tried just 'sub_items' as the parameter also, but no. I am using GSON. No choice use others.

final JSONObject jsonObj = new JSONObject(JSON_STRING);
final JSONArray subItems = jsonObj.getJSONArray("items.sub_items");
final int       n       = subItems.length();
for (int i = 0; i < n; ++i) {
    final JSONObject subI= subItems.getJSONObject(i);
    System.out.println("id="+subI.getString("id"));
    System.out.println("name="+subI.getString("name"));
}               

The following is my json as a response from a REST api call.

{
  "menu": {
    "items": [{
            "id": 1,
            "code": "hot1_sub1_mnu",
            "name": "Mutton",
            "status": "1",
            "sub_items": [{
                "id": "01",
                "name": "Mutton Pepper Fry",
                "price": "100"
            }, {
                "id": "02",
                "name": "Mutton Curry",
                "price": "100"
            }]
        },
        {
            "id": "2",
            "code": "hot1_sub2_mnu",
            "name": "Sea Food",
            "status": "1",
            "sub_items": [{
                "id": "01",
                "name": "Fish Fry",
                "price": "150"
            }]
        },
        {
            "id": "3",
            "code": "hot1_sub3_mnu",
            "name": "Noodles",
            "status": "1",
            "sub_items": [{
                "id": "01",
                "name": "Chicken Noodles",
                "price": "70"
            }, {
                "id": "02",
                "name": "Egg Noodles",
                "price": "60"
            }]
        }
    ]
}}

As I said, my JSON is a response from an REST api call, and it is 7300 lines long, like shown below with the outline, as shown in code beautifier.

object      {3}
    infoTransferReqResp     {1}
paramExtens :   null
    pageGroups      {1}
    pageGroups      [1]
    0       {4}
page_group_name :   LFG - LG - Insured Summary
page_group_id   :   8100
    **pages     [3]**
    repeatingBlocks     {1}

I needed to extract a string value 'questionText' from inside 'Pages' array. I used jsonPath() method with navigation path as given below which solved the problem.

JsonPath                 jsonPathEvaluator = response.jsonPath();
List<List<List<String>>> questions         = jsonPathEvaluator.getList("pageGroups.pageGroups.pages.questions.questionText");

It gave me 3 ArrayLists one embedded in another corresponding to 3 arrays of ' pages '

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM