【问题标题】:How to get the values from Nested JSONArrays using ORG.JSON Library in java?如何使用 Java 中的 ORG.JSON 库从嵌套 JSONArrays 中获取值?
【发布时间】:2021-06-10 06:19:29
【问题描述】:

这是我的示例 json,我需要从嵌套的 json 数组中获取数据键的值,我尝试过但遇到了异常, 任何帮助表示赞赏。

  {
      "configurations": [
        {
          "data": "values",
          "array": [
            {
              "fieldType": "count",
              "datas": "countdata"
            },
            {
              "fieldType": "welcome",
              "datas": "welcomeData"
            }
          ]
        }
      ]
    }

这是我正在尝试的示例代码,但在这里我得到了如下所示的异常,这里的限制是我们只能使用 org.json 库。

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONObject;

public class TestData {
    public static void matchingColumnCount(String input_file_path) throws Exception {
        String contents = new String(Files.readAllBytes(Paths.get(input_file_path)));
        JSONObject jsonObject = new JSONObject(contents);
        JSONArray columnDefsDatasValue = jsonObject.getJSONArray("configurations");
        ArrayList<String> arrayList = new ArrayList<String>();
        for (int i = 0; i < columnDefsDatasValue.length(); i++) {
            JSONArray jsonArray = columnDefsDatasValue.getJSONObject(i).getJSONArray("array");
            for (int j = 0; i < jsonArray.length(); j++) {
                JSONObject temp = jsonArray.getJSONObject(j);
                String string = temp.getString("datas");
                arrayList.add(string);
            }
            System.out.println("get Datas Values" + arrayList);
        }
    }
    public static void main(String[] args) throws Exception {
        String inputFileName = "test.json";
        String input_file_path = "/home/Videos" + "/" + inputFileName;
        matchingColumnCount(input_file_path);
    }
}

例外:-

Exception in thread "main" org.json.JSONException: JSONArray[2] not found.
    at org.json.JSONArray.get(JSONArray.java:194)
    at org.json.JSONArray.getJSONObject(JSONArray.java:292)
    at com.planlytx.TestData.matchingColumnCount(TestData.java:20)
    at com.planlytx.TestData.main(TestData.java:31)

【问题讨论】:

    标签: java json org.json


    【解决方案1】:
     for (int i = 0; i < columnDefsDatasValue.length(); i++) {
            JSONArray jsonArray = columnDefsDatasValue.getJSONObject(i).getJSONArray("array");
            for (int j = 0; i < jsonArray.length(); j++) {
                JSONObject temp = jsonArray.getJSONObject(j);
                String string = temp.getString("datas");
                arrayList.add(string);
            }
            System.out.println("get Datas Values" + arrayList);
        }
    

    一个简单的错误给出了这个错误。在你的条件下,在内部 for 循环中用 j 替换 i

    for (int j = 0; j < jsonArray.length(); j++) 
    

    当 i=0 在内循环中时; 0

    【讨论】:

      【解决方案2】:

      你在这里使用了错误的循环变量。

       for (int j = 0; i < jsonArray.length(); j++) {
      
      

      改成

       for (int j = 0; j < jsonArray.length(); j++) {
      

      【讨论】:

        猜你喜欢
        • 2018-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-25
        • 1970-01-01
        • 1970-01-01
        • 2020-08-14
        相关资源
        最近更新 更多