Table of Contents

JSON & Jackson

Obiective

Scopul acestui tutorial este de a vă familiariza cu API-ul pus la dispozitie de catre biblioteca Jackson pentru citirea si scrierea fisierelor in format JSON.

JSON

JSON (JavaScript Object Notation) este un format de reprezentare si interschimb de date intre aplicatii. Acesta este un format text, usor de inteles de om, cat si usor de parsat pentru calculator.

Exemplu de fisier in format JSON:

    {
         "firstName": "John",
         "lastName": "Smith",
         "address": {
             "streetAddress": "21 2nd Street",
             "city": "New York",
             "state": "NY",
             "postalCode": 10021
         },
         "phoneNumbers": [
             "212 555-1234",
             "646 555-4567"
         ]
     }

Mai multe informatii puteti gasi aici : https://www.json.org/

Parsarea JSON in Java: Jackson

Exista mai multe biblioteci care stiu sa parseze fisere JSON in java si sa le mapeze la un obiect. In acest tutorial, vom prezenta Jackson.

Jackson este o biblioteca de java care faciliteaza citirea fisierelor JSON. Acesta mapeaza field-urile unui obiect la cele din fisierul JSON.

Importarea API-ului

Acest API este livrat deja compilat sub formă de fișier JAR. Importarea unui astfel de proiect este explicata în acest tutorial.

Descarcare biblioteci:

Jackson Core Jackson Databind Jackson Annotations

Folosirea API-ului

Vom folosi urmatoarea clasa:

    public class Car {
 
        private String color;
        private String type;
 
        // gettere si settere standard
        public String getColor() {
            return color;
        }
 
        public String getType() {
            return type;
        }
 
        public void setColor(String color) {
            this.color = color;
        }
 
        public void setType(String type) {
            this.type = type;
        }
    }
Pentru a mapa un obiect, avem nevoie ca toate campurile mapate sa aiba settere si gettere standard.

Clasa care ne intereseaza este ObjectMapper. Aceasta clasa pune la dispozitie metode cu ajutorul carora putem transpune informatiile dintr-un JSON intr-un obiect si invers.

In cazul datelor in format JSON aflate intr-un string, ghilimele, fiind caractere speciale, trebuie escapate ( \“ )

Exemplu de mapare dintr-un string

    ObjectMapper objectMapper = new ObjectMapper();
    String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
    Car car = objectMapper.readValue(json, Car.class);
 

Exemplu de mapare dintr-un fisier

    ObjectMapper objectMapper = new ObjectMapper();
    Car car = objectMapper.readValue(new File("target/car.json"), Car.class);
 

Exemplu de mapare a unei liste:

    String jsonCarArray =
  "[{ \"color\" : \"Black\", \"type\" : \"BMW\" }, { \"color\" : \"Red\", \"type\" : \"FIAT\" }]";
    List<Car> listCar = objectMapper.readValue(jsonCarArray, new TypeReference<List<Car>>(){});

Exemplu de mapare a unui obiect intr-un fisier JSON

    ObjectMapper objectMapper = new ObjectMapper();
    Car car = new Car("yellow", "renault");
    objectMapper.writeValue(new File("target/car.json"), car);

Obiecte neasted

In formatul JSON, putem avea si obiecte neasted:

Clase:

    public class Car {
 
        private Color color;
        private String type;
 
        // settere si gettere standard
        public Color getColor() {
            return color;
        }
 
        public String getType() {
            return type;
        }
 
        public void setColor(Color color) {
            this.color = color;
        }
 
        public void setType(String type) {
            this.type = type;
        }
    }
 
    public class Color {
        private int red;
        private int blue;
        private int green;
        // settere si gettere standard
    }

Fisier JSON :

    {
       “color”: {
              “red”: 255,
              “blue”: 255,
              “green”: 255
              },
        “type”: “Tesla”
    }

Documentatie: http://fasterxml.github.io/jackson-databind/javadoc/2.9/ → ObjectMapper