Ich möchte diese "JSON"-Datei mit Java unter Verwendung der einfachen JSON-Bibliothek lesen.
Meine "JSON"-Datei sieht wie folgt aus:
[
{
"name":"John",
"city":"Berlin",
"cars":[
"audi",
"bmw"
],
"job":"Teacher"
},
{
"name":"Mark",
"city":"Oslo",
"cars":[
"VW",
"Toyata"
],
"job":"Doctor"
}
]
Dies ist der Java-Code, den ich geschrieben habe, um diese Datei zu lesen:
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();
}
}
}
Aber ich erhalte die folgende Ausnahme:
Exception in thread "main" java.lang.ClassCastException: org.json.simple.JSONArray kann nicht in org.json.simple.JSONObject gecastet werden at javaapplication1.JavaApplication1.main(JavaApplication1.java:24)
Kann mir jemand sagen, was ich falsch mache? Die ganze Datei ist ein Array und es gibt Objekte und ein anderes Array (Autos) in dem ganzen Array der Datei. Aber ich weiß nicht, wie ich das ganze Array in ein Java-Array parsen kann. Ich hoffe, dass mir jemand mit einer Codezeile helfen kann, die ich in meinem Code vermisse.
Danke
Die gesamte Datei ist ein Array, und es gibt Objekte und andere Arrays (z. B. Autos) in dem gesamten Array der Datei.
Wie Sie sagen, ist die äußerste Schicht Ihres JSON-Blob ein Array. Daher wird Ihr Parser ein JSONArray
zurückgeben. Sie können dann JSONObject
s aus dem Array holen ...
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+"");
}
}
Als Referenz, siehe "Beispiel 1" auf der json-simple decoding example Seite.
Sie können die Jackson-Bibliothek verwenden und einfach diese 3 Zeilen verwenden, um Ihre json-Datei in ein Java-Objekt zu konvertieren.
ObjectMapper mapper = new ObjectMapper();
InputStream is = Test.class.getResourceAsStream("/test.json");
testObj = mapper.readValue(is, Test.class);
Hierfür können Sie Gson verwenden.
Gson" ist eine Java-Bibliothek, die verwendet werden kann, um Java-Objekte in ihre JSON-Darstellung zu konvertieren. Sie kann auch verwendet werden, um eine `JSON'-String in ein entsprechendes Java-Objekt zu konvertieren.
Schauen Sie sich dies an Konvertierung von JSON nach Java