gson 如何在Java中使用嵌套数组解析JSON字符串

b4wnujal  于 2022-11-06  发布在  Java
关注(0)|答案(1)|浏览(230)

从类似的问题Nested JSON Array in Java开始,我有一个有点奇怪的json作为来自REST api(POST)调用的响应。我需要在每个items数组元素中找出sub_items数组的idname
我尝试了如下所示的方法,但遇到了如下错误
org.json.JSONException:找不到JSONObject[“项目.子项目”]。
我也尝试了'sub_items'作为参数,但是没有。我使用的是GSON。没有选择使用其他的。

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"));
}

下面是我的json作为REST api调用的响应。

{
  "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"
            }]
        }
    ]
}}
ycl3bljg

ycl3bljg1#

正如我所说的,我的JSON是来自REST API调用的响应,它有7300行长,如下面的大纲所示,如代码美化程序所示。

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}

我需要从'Pages'数组中提取一个字符串值'questionText'。我使用jsonPath()方法和下面给出的导航路径解决了这个问题。

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

它给了我3个数组列表,一个嵌入另一个,对应于3个'pages'数组

相关问题