当前位置: 首页 > 面试题库 >

使用JSON Java检索嵌套数组值

薛利
2023-03-14
问题内容

我正在努力从格式如下的JSON文件中检索一些值:

{
  "search": {
    "entry": [
      {
        "found": "identity=9454532,l=big,ton=grand,k=molvi",
        "attribute": [
          {
            "name": "firstname",
            "value": [
              "Lucas"
            ]
          },
          {
            "name": "lastname",
            "value": [
              "Brandon"
            ]
          }
        ]
      }
    ],
    "return": {
      "code": 0,
      "message": "Success",
      "count": 1
    }
  }
}

我尝试了不同的方法(json,gson,jayway-
JsonPath),但是我无法从“属性”数组中获取值,只能从第一个数组中获取值。我不知道如何指定“属性”是一个JSONArray而不是一个JSONObject或如何为其设置正确的路径。这是我正在玩的最后一个代码,当它找到一个数组时停止:

public void String nameObtain (String email) throws IOException{

String link = "http://jsonfile/" + email;

    JSONObject json = readJsonFromUrl(link);        
    JSONObject rootObject = json.getJSONObject("search");
    JSONArray firstArray = rootObject.getJSONArray("entry");

for (int i = 0, size = firstArray.length(); i < size; i++) {
    JSONObject objectInArray = firstArray.getJSONObject(i);

    String[] elementNames = JSONObject.getNames(objectInArray);
    System.out.printf("%d ELEMENTS IN CURRENT OBJECT:\n", elementNames.length);
    for (String elementName : elementNames) {
        String value = objectInArray.getString(elementName);
        System.out.printf("name=%s, value=%s\n", elementName, value);
    }

}

}

我想做的就是获得卢卡斯或布兰登的价值。任何帮助都感激不尽!


问题答案:

使用的库:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

检查以下代码并逐步解析

    JSONObject search = (JSONObject) jsonObject.get("search");//1
    JSONArray entry = (JSONArray) search.get("entry");//2
    for (int i = 0; i < entry.size(); i++) {
        JSONObject jsonObject1 = (JSONObject) entry.get(i);//3
        JSONArray jsonarray1 = (JSONArray) jsonObject1.get("attribute");//4
        for (int j = 0; j < jsonarray1.size(); j++) {
            System.out.println(((JSONObject) jsonarray1.get(j)).get(
                    "value").toString());//5

        }

    }

它将逐步给出所提到的值:

1){“ entry”:[{“ found”:“ identity = 9454532,l = big,ton = grand,k = molvi”,“
attribute”:[{“ name”:“ firstname”,“ value”:[ “ Lucas”]},{“ name”:“姓氏”,“
value”:[“ Brandon”]}}}}],“返回”:{“ code”:0,“ count”:1,“ message”: “成功”}}

2)[{“ found”:“ identity = 9454532,l = big,ton = grand,k = molvi”,“
attribute”:[{“ name”:“ firstname”,“ value”:[“ Lucas”]} ,{“ name”:“
lastname”,“ value”:[“ Brandon”]}]}]]

3){“ found”:“ identity = 9454532,l = big,ton = grand,k = molvi”,“
attribute”:[{“ name”:“ firstname”,“ value”:[“ Lucas”]}, {“ name”:“
lastname”,“ value”:[“ Brandon”]}]}

4)[{“ name”:“ firstname”,“ value”:[“ Lucas”]},{“ name”:“ lastname”,“
value”:[“ Brandon”]}]

5)[“ Lucas”]和[“ Brandon”]

因此,基本上,您必须分别照顾JSONObject和JSONArray并进行相应的解析。



 类似资料:
  • 我正在努力从JSON文件中检索一些值,格式如下: 我尝试过不同的方法(json、gson、jayway JsonPath),但我无法从“属性”数组中获取值,只能从第一个数组中获取值。我不知道如何指定“attribute”是JSONArray而不是JSONObject,也不知道如何设置它的正确路径。这是我玩的最后一个代码,它在创建数组时停止: 我想做的是得到卢卡斯或布兰登的价值观。任何帮助都将不胜感

  • 我已经成功地编写了一个方法,当JavaScript文件包含JSON数组及其下面的代码时输出嵌套的JSON,但是我在使用Ajax从外部文件检索相同数据时遇到了严重的麻烦。 这里是正在工作的本地版本。 但是,我花了两天的时间来研究实现这一点的方法,将JSON单独保存在一个单独的文件中。 我在想,有一些明显的东西我完全错过了。我也试过这里演示的方法,结果完全一样。 谁能给我指出正确的方向吗? 谢谢!

  • 我已经在GraphQL AppSync查询上制定了一个相当复杂的DynamoDB解析器链。我很想知道的是,我是否可以以一种需要更少DynamoDB查询的方式设计它。 以下是我的GraphQL模式: 这是我正在进行的查询: 我的DynamoDB表设置如下: 因此,在我的解析器中,我将: > 接下来,在模型对象中有一个附加到“标记”的解析器。这将使用两个表达式进行查询。一个用于PartitionKey

  • 问题内容: 我正在尝试更新嵌套数组中的值,但无法使其正常工作。 我的对象是这样的 我需要将值推送到“ answeredBy”数组。 在下面的示例中,我尝试将“成功”字符串推到“ 123 _id”对象的“ answeredBy”数组中,但是它不起作用。 我找到了此链接,但其答案仅表示我应该使用类似结构的对象而不是数组。这不适用于我的情况。我真的需要将我的对象嵌套在数组中 如果您能在这里帮助我,那就太

  • 我创造了一个这样的形式 如果它没有验证,我将重新显示填充了数据的表单。填充问题数据并不难 但是,我无法从答案模型(具有内容和链接字段)的会话哈希中获取嵌套值。这不起作用。 我觉得是因为hash对象中的0,1,2迭代。例如,这是hash对象的一个片段(完整显示在下面) 但我不知道在构建问题答案时如何表达这一点 当我尝试构建时,在尝试从哈希对象中提取数据时,我不会表示迭代。你能解释一下我如何修改这一行

  • 如何使用jolt转换将平面JSON转换为嵌套JSON?我对JSON和jolt是新手。 输入: 预期输出: 编辑:我想在< code>SubFunds中添加一个新字段,但是新字段不在JSON文件中,它是计算字段,我可以按原样添加示例吗 并重命名字段: