Eu quero ler este arquivo JSON
com java utilizando a biblioteca simples json.
O meu ficheiro 'JSON' tem este aspecto:
[
{
"name":"John",
"city":"Berlin",
"cars":[
"audi",
"bmw"
],
"job":"Teacher"
},
{
"name":"Mark",
"city":"Oslo",
"cars":[
"VW",
"Toyata"
],
"job":"Doctor"
}
]
Este é o código java que eu escrevi para ler este ficheiro:
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();
}
}
}
Mas eu tenho a seguinte excepção:
Exceção em thread " main" java.lang.ClassCastException: org.json.simple.JSONArray não pode ser lançado para org.json.simple.JSONObject em javaapplication1.JavaApplication1.main(JavaApplication1.java:24)
Alguém me pode dizer o que estou a fazer mal? O arquivo inteiro é um array e há objetos e outro array (carros) em todo o array do arquivo. Mas eu não sei como eu posso analisar todo o array em um array java. Espero que alguém me possa ajudar com uma linha de código que me está a faltar no meu código.
Obrigado
O arquivo inteiro é um array e há objetos e outros arrays (por exemplo, carros) em todo o array do arquivo.
Como você diz, a camada mais externa da sua bolha JSON é uma matriz. Portanto, seu parser irá retornar um JSONArray
. Você pode então obter JSONObject
s do array ...
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+"");
}
}
Para referência, veja "Exemplo 1" na página json-simple decoding example.
Você pode usar a biblioteca jackson e simplesmente usar estas 3 linhas para converter seu arquivo json para Java Object.
ObjectMapper mapper = new ObjectMapper();
InputStream is = Test.class.getResourceAsStream("/test.json");
testObj = mapper.readValue(is, Test.class);
Você pode usar Gson para isso.
A GSON
é uma biblioteca Java que pode ser utilizada para converter Objetos Java em sua representação JSON
. Ela também pode ser utilizada para converter uma string JSON
para um objeto Java equivalente.
Veja isto Converter o JSON para Java