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]