我尝试读取以下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。