Quiero leer este archivo JSON
con java usando la biblioteca json simple.
Mi archivo JSON
tiene este aspecto:
[
{
"name":"John",
"city":"Berlin",
"cars":[
"audi",
"bmw"
],
"job":"Teacher"
},
{
"name":"Mark",
"city":"Oslo",
"cars":[
"VW",
"Toyata"
],
"job":"Doctor"
}
]
Este es el código java que escribí para leer este archivo:
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();
}
}
}
Pero me sale la siguiente excepción:
Excepción en el hilo "main" java.lang.ClassCastException: org.json.simple.JSONArray no puede ser lanzado a org.json.simple.JSONObject at javaapplication1.JavaApplication1.main(JavaApplication1.java:24)
¿Puede alguien decirme qué estoy haciendo mal? Todo el archivo es un array y hay objetos y otro array (coches) en todo el array del archivo. Pero no se como puedo parsear todo el array en un array java. Espero que alguien pueda ayudarme con una línea de código que me falta en mi código.
Gracias
El archivo completo es un array y hay objetos y otros arrays (por ejemplo, coches) en el array completo del archivo.
Como dices, la capa más externa de tu blob JSON es un array. Por lo tanto, tu parser devolverá un JSONArray
. A continuación, puede obtener JSONObject
s de la matriz ...
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+"");
}
}
Como referencia, ver "Ejemplo 1" en la página json-simple decoding example.
Puede utilizar la biblioteca jackson y simplemente utilizar estas 3 líneas para convertir su archivo json en un objeto Java.
ObjectMapper mapper = new ObjectMapper();
InputStream is = Test.class.getResourceAsStream("/test.json");
testObj = mapper.readValue(is, Test.class);
Para ello puede utilizar Gson.
GSON
es una librería de Java que se puede utilizar para convertir objetos Java en su representación JSON
. También se puede utilizar para convertir una cadena JSON
en un objeto Java equivalente.
Echa un vistazo a esto Convertir JSON a Java