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.
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"