Search code examples
javajsongson

java deserialize multiple arrays


I have the following json

{   "users": [
    {
      "id": 1,
      "name": "Ash",
      "email": "ashketchum@kanto.com"
    },
    {
      "id": 2,
      "name": "Gary",
      "email": "garyoak@kanto.com"
    }],   
"pokemon": [
    {
      "userId": 1,
      "name": "Ember",
      "frontImg": "/images/pokemon/local-mon/ember/front.png",
      "backImg": "/images/pokemon/local-mon/ember/back.png",
      "type": "fire",
      "hp": 100,
      "id": 1
    },
    {
      "userId": 1,
      "name": "Draggy",
      "frontImg": "/images/pokemon/local-mon/dragon/front.png",
      "backImg": "/images/pokemon/local-mon/dragon/back.png",
      "type": "dragon",
      "hp": 100,
      "id": 2
    }   ] }

How could I deserialize this into a single object or array containing both the users array of data and the pokemon array of data in Java? Preferably in gson but I'm not opposed to changing libraries.


Solution

  • I suggest using Jackson to read JSON strings into Java Object without defining a suitable class.

    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    import java.io.IOException;
    
    public class JavaApplication {
        public static void main(String[] args) throws IOException {
            ObjectMapper mapper = new ObjectMapper();
            mapper.enable(SerializationFeature.INDENT_OUTPUT);
    
            String json = "{\"users\":[{\"id\":1,\"name\":\"Ash\",\"email\":\"ashketchum@kanto.com\"},{\"id\":2,\"name\":\"Gary\",\"email\":\"garyoak@kanto.com\"}],\"pokemon\":[{\"userId\":1,\"name\":\"Ember\",\"frontImg\":\"/images/pokemon/local-mon/ember/front.png\",\"backImg\":\"/images/pokemon/local-mon/ember/back.png\",\"type\":\"fire\",\"hp\":100,\"id\":1},{\"userId\":1,\"name\":\"Draggy\",\"frontImg\":\"/images/pokemon/local-mon/dragon/front.png\",\"backImg\":\"/images/pokemon/local-mon/dragon/back.png\",\"type\":\"dragon\",\"hp\":100,\"id\":2}]}";
            JsonNode data = mapper.readTree(json);
    
            System.out.println(mapper.writeValueAsString(data));
            System.out.println(data.get("users"));
            System.out.println(data.get("users").get(0));
            System.out.println(data.get("pokemon"));
            System.out.println(data.get("pokemon").get(0).get("name"));
        }
    }
    

    The output will be:

    {
      "users" : [ {
        "id" : 1,
        "name" : "Ash",
        "email" : "ashketchum@kanto.com"
      }, {
        "id" : 2,
        "name" : "Gary",
        "email" : "garyoak@kanto.com"
      } ],
      "pokemon" : [ {
        "userId" : 1,
        "name" : "Ember",
        "frontImg" : "/images/pokemon/local-mon/ember/front.png",
        "backImg" : "/images/pokemon/local-mon/ember/back.png",
        "type" : "fire",
        "hp" : 100,
        "id" : 1
      }, {
        "userId" : 1,
        "name" : "Draggy",
        "frontImg" : "/images/pokemon/local-mon/dragon/front.png",
        "backImg" : "/images/pokemon/local-mon/dragon/back.png",
        "type" : "dragon",
        "hp" : 100,
        "id" : 2
      } ]
    }
    [{"id":1,"name":"Ash","email":"ashketchum@kanto.com"},{"id":2,"name":"Gary","email":"garyoak@kanto.com"}]
    {"id":1,"name":"Ash","email":"ashketchum@kanto.com"}
    [{"userId":1,"name":"Ember","frontImg":"/images/pokemon/local-mon/ember/front.png","backImg":"/images/pokemon/local-mon/ember/back.png","type":"fire","hp":100,"id":1},{"userId":1,"name":"Draggy","frontImg":"/images/pokemon/local-mon/dragon/front.png","backImg":"/images/pokemon/local-mon/dragon/back.png","type":"dragon","hp":100,"id":2}]
    "Ember"