JSON con Java
Questo capitolo spiega come codificare e decodificare oggetti JSON utilizzando il linguaggio di programmazione Java. Cominciamo con la preparazione dell'ambiente per iniziare la nostra programmazione con Java per JSON.
Ambiente
Prima di iniziare con la codifica e la decodifica di JSON utilizzando Java, è necessario installare uno dei moduli JSON disponibili. Per questo tutorial abbiamo scaricato e installato JSON.simple e abbiamo aggiunto il percorso dijson-simple-1.1.1.jar file nella variabile d'ambiente CLASSPATH.
Mappatura tra entità JSON e Java
JSON.simple mappa le entità dal lato sinistro al lato destro durante la decodifica o l'analisi e mappa le entità da destra a sinistra durante la codifica.
JSON | Giava |
---|---|
corda | java.lang.String |
numero | java.lang.Number |
vero | falso | java.lang.Boolean |
nullo | nullo |
Vettore | java.util.List |
oggetto | java.util.Map |
Sulla decodifica, la classe concreta predefinita di java.util.List è org.json.simple.JSONArray e la classe concreta predefinita di java.util.Map è org.json.simple.JSONObject .
Codifica JSON in Java
Di seguito è riportato un semplice esempio per codificare un oggetto JSON utilizzando Java JSONObject che è una sottoclasse di java.util.HashMap. Non viene fornito alcun ordine. Se è necessario un ordine rigoroso degli elementi, utilizzare il metodo JSONValue.toJSONString (map) con un'implementazione della mappa ordinata come java.util.LinkedHashMap.
import org.json.simple.JSONObject;
class JsonEncodeDemo {
public static void main(String[] args) {
JSONObject obj = new JSONObject();
obj.put("name", "foo");
obj.put("num", new Integer(100));
obj.put("balance", new Double(1000.21));
obj.put("is_vip", new Boolean(true));
System.out.print(obj);
}
}
Compilando ed eseguendo il programma di cui sopra verrà generato il seguente risultato:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
Di seguito è riportato un altro esempio che mostra lo streaming di un oggetto JSON utilizzando Java JSONObject -
import org.json.simple.JSONObject;
class JsonEncodeDemo {
public static void main(String[] args) {
JSONObject obj = new JSONObject();
obj.put("name","foo");
obj.put("num",new Integer(100));
obj.put("balance",new Double(1000.21));
obj.put("is_vip",new Boolean(true));
StringWriter out = new StringWriter();
obj.writeJSONString(out);
String jsonText = out.toString();
System.out.print(jsonText);
}
}
Durante la compilazione e l'esecuzione del programma precedente, viene generato il seguente risultato:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
Decodifica JSON in Java
Il seguente esempio fa uso di JSONObject e JSONArray dove JSONObject è java.util.Map e JSONArray è java.util.List, quindi è possibile accedervi con le operazioni standard di Map o List.
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;
class JsonDecodeDemo {
public static void main(String[] args) {
JSONParser parser = new JSONParser();
String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
try{
Object obj = parser.parse(s);
JSONArray array = (JSONArray)obj;
System.out.println("The 2nd element of array");
System.out.println(array.get(1));
System.out.println();
JSONObject obj2 = (JSONObject)array.get(1);
System.out.println("Field \"1\"");
System.out.println(obj2.get("1"));
s = "{}";
obj = parser.parse(s);
System.out.println(obj);
s = "[5,]";
obj = parser.parse(s);
System.out.println(obj);
s = "[5,,2]";
obj = parser.parse(s);
System.out.println(obj);
}catch(ParseException pe) {
System.out.println("position: " + pe.getPosition());
System.out.println(pe);
}
}
}
Durante la compilazione e l'esecuzione del programma sopra, verrà generato il seguente risultato:
The 2nd element of array
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}
Field "1"
{"2":{"3":{"4":[5,{"6":7}]}}}
{}
[5]
[5,2]