我想用java读取这个JSON
文件,使用json simple库。
我的`JSON'文件看起来像这样。
[
{
"name":"John",
"city":"Berlin",
"cars":[
"audi",
"bmw"
],
"job":"Teacher"
},
{
"name":"Mark",
"city":"Oslo",
"cars":[
"VW",
"Toyata"
],
"job":"Doctor"
}
]
这是我写的用于读取该文件的java代码。
package javaapplication1;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class JavaApplication1 {
public static void main(String[] args) {
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader("c:\\file.json"));
JSONObject jsonObject = (JSONObject) obj;
String name = (String) jsonObject.get("name");
System.out.println(name);
String city = (String) jsonObject.get("city");
System.out.println(city);
String job = (String) jsonObject.get("job");
System.out.println(job);
// loop array
JSONArray cars = (JSONArray) jsonObject.get("cars");
Iterator<String> iterator = cars.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
但我得到了以下异常。
线程"main" java.lang.ClassCastException中的异常。 org.json.simple.JSONArray不能被转换为org.json.simple.JSONObject at javaapplication1.JavaApplication1.main(JavaApplication1.java:24)
谁能告诉我,我做错了什么?整个文件是一个数组,在文件的整个数组中,有对象和另一个数组(汽车)。但我不知道如何将整个数组解析成一个java数组。我希望有人能帮助我,告诉我我的代码中缺少的那一行代码。
谢谢
***整个文件是一个数组,在文件的整个数组中存在着对象和其他数组(如汽车)。
正如你所说,你的JSON blob的最外层是一个数组。 因此,你的解析器将返回一个JSONArray
。 然后你可以从数组中获得JSONObject
s ...
JSONArray a = (JSONArray) parser.parse(new FileReader("c:\\exer4-courses.json"));
for (Object o : a)
{
JSONObject person = (JSONObject) o;
String name = (String) person.get("name");
System.out.println(name);
String city = (String) person.get("city");
System.out.println(city);
String job = (String) person.get("job");
System.out.println(job);
JSONArray cars = (JSONArray) person.get("cars");
for (Object c : cars)
{
System.out.println(c+"");
}
}
作为参考,见json-simple decoding example页面上的"实例1"。