Je veux lire ce fichier JSON
avec java en utilisant la bibliothèque json simple.
Mon fichier JSON
ressemble à ceci :
[
{
"name":"John",
"city":"Berlin",
"cars":[
"audi",
"bmw"
],
"job":"Teacher"
},
{
"name":"Mark",
"city":"Oslo",
"cars":[
"VW",
"Toyata"
],
"job":"Doctor"
}
]
Voici le code java que j'ai écrit pour lire ce fichier :
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();
}
}
}
Mais j'obtiens l'exception suivante :
Exception in thread "main" ; java.lang.ClassCastException : org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject at javaapplication1.JavaApplication1.main(JavaApplication1.java:24)
Quelqu'un peut-il me dire ce que je fais de mal ? Le fichier entier est un tableau et il y a des objets et un autre tableau (voitures) dans le tableau entier du fichier. Mais je ne sais pas comment je peux analyser le tableau entier dans un tableau java. J'espère que quelqu'un pourra m'aider avec une ligne de code qui manque dans mon code.
Merci
Le fichier entier est un tableau et il y a des objets et d'autres tableaux (par exemple des voitures) dans le tableau entier du fichier.
Comme vous le dites, la couche la plus externe de votre blob JSON est un tableau. Par conséquent, votre analyseur retournera un JSONArray
. Vous pouvez ensuite récupérer les JSONObjects
s du tableau ...
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+"");
}
}
Pour référence, voir "Exemple 1" ; sur la page [json-simple decoding example][1].
[1] : http://code.google.com/p/json-simple/wiki/DecodingExamples
Vous pouvez utiliser la bibliothèque jackson et utiliser simplement ces 3 lignes pour convertir votre fichier json en objet Java.
ObjectMapper mapper = new ObjectMapper();
InputStream is = Test.class.getResourceAsStream("/test.json");
testObj = mapper.readValue(is, Test.class);
Vous pouvez utiliser [Gson][1] pour cela.
GSON
est une bibliothèque Java qui peut être utilisée pour convertir des objets Java en leur représentation JSON
. Elle peut également être utilisée pour convertir une chaîne JSON
en un objet Java équivalent.
Jetez un coup d'oeil à ceci Convertir JSON en Java.