用Java读取JSON文件



我尝试读取以下JSON文件:

[
{
"0": {
"owner_ip": 0,
"id": 0,
"text": "test",
"timestamp": ""
}
},
{
"1": {
"owner_ip": 0,
"id": 1,
"text": "test",
"timestamp": ""
}
},
{
"2": {
"owner_ip": 0,
"id": 2,
"text": "test",
"timestamp": ""
}
},
{
"3": {
"owner_ip": 0,
"id": 3,
"text": "test",
"timestamp": ""
}
},
{
"4": {
"owner_ip": 0,
"id": 4,
"text": "test",
"timestamp": ""
}
}
]

我导入了以下包的:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;

我想得到";0"->quot;文本";,我执行以下操作:

JSONParser jsonParser = new JSONParser();
try(FileReader reader = new FileReader("filename"){
Object obj = jsonParser.parse(reader);
JSONArray readList = (JSONArray) obj;
System.out.println(readList);
System.out.println(readList.get(0));
System.out.println(readList.get(0).getClass().getName());
// Output = {"0":{"owner_ip":0,"id":0,"text":"test","timestamp":""}}
// Output = org.json.simple.JSONObject

在这之后,我不知道如何进一步编码。我尝试了很多不同的方法,但都不起作用。我希望你能帮助我。

您的JSON格式很奇怪。它有一个对象数组,这些对象有一个条目,其关键字与循环中的索引相同。

第一个元素的text条目的JSON路径将是

json[0]["0"].text

您会看到0两次,因为您需要首先选择数组的第一个元素,然后选择该数组中键为"0"的对象。

在你的代码中,你可以这样做:

JSONArray array = (JSONArray) jsonParser.parse(reader);
JSONObject obj = (JSONObject) array.get(0);
JSONObject nestedObj = (JSONObject) obj.get("0");
String textValue = (String) nestedObj.get("text");
System.out.println(textValue);

尽管我建议修复JSON的格式。那个嵌套对象似乎完全没有必要。

最终,您的JSON将如下所示:

[
{
"owner_ip": 0,
"id": 0,
"text": "test",
"timestamp": ""
},
{
"owner_ip": 0,
"id": 1,
"text": "test",
"timestamp": ""
},
{
"owner_ip": 0,
"id": 2,
"text": "test",
"timestamp": ""
},
{
"owner_ip": 0,
"id": 3,
"text": "test",
"timestamp": ""
},
{
"owner_ip": 0,
"id": 4,
"text": "test",
"timestamp": ""
}
]

然后您可以跳过代码中的obj.get("0")行。

JSONArray array = (JSONArray) jsonParser.parse(reader);
JSONObject obj = (JSONObject) array.get(0);
String textValue = (String) obj.get("text");
System.out.println(textValue);

如果您确定结构保持不变,

JSONArray readList = (JSONArray) obj;
JSONObject targetObj = readList.get(0);
System.out.println(targetObj.get("text")); // will print "test"

或者您可以迭代抛出JSONArray。

相关内容

  • 没有找到相关文章

最新更新