如何使用 java 中的 ORG.JSON 库从嵌套的 JSONArrays 中获取值?
How to get the values from Nested JSONArrays using ORG.JSON Library in java?
这是我的示例 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)
你在这里使用了错误的循环变量。
for (int j = 0; i < jsonArray.length(); j++) {
改为
for (int j = 0; j < jsonArray.length(); j++) {
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);
}
一个简单的错误给出了这个 error.Replace i with j in inner for loop in your condition
for (int j = 0; j < jsonArray.length(); j++)
在内循环中i=0时; 0
这是我的示例 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)
你在这里使用了错误的循环变量。
for (int j = 0; i < jsonArray.length(); j++) {
改为
for (int j = 0; j < jsonArray.length(); j++) {
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);
}
一个简单的错误给出了这个 error.Replace i with j in inner for loop in your condition
for (int j = 0; j < jsonArray.length(); j++)
在内循环中i=0时; 0