Anurag Tripathi
Anurag Tripathi

Reputation: 1208

deserialize inner JSON object

I have a class POJO

Class Pojo {
String id;
String name;
//getter and setter
}

I have a json like

{
    "response" : [
        {
            "id" : "1a",
            "name" : "foo"
        }, 
        {
            "id" : "1b",
            "name" : "bar"
        }
    ]
}

I am using Jackson ObjectMapper for deserialization. How can I get List<Pojo> without creating any other parent class?

If it is not possible, is it possible to get Pojo object which holds just first element of json string i.e. in this case id="1a" and name="foo"?

Upvotes: 2

Views: 8580

Answers (3)

user12057507
user12057507

Reputation:

Pojo pojo;
json = {
    "response" : [
        {
            "id" : "1a",
            "name" : "foo"
        }, 
        {
            "id" : "1b",
            "name" : "bar"
        }
    ]
}
ObjectMapper mapper = new ObjectMapper();
JsonNode root = objectMapper.readTree(json);
pojo = objectMapper.readValue(root.path("response").toString(),new TypeReference<List<Pojo>>() {});

First, you have to create a JSON node with your JSON file. Now you have a JSON node. You can go to the desired location using path function of JSON node like what I did

root.path("response")

However this will return a JSON tree. To make a String, I have used the toString method. Now, you have a String like below " [ { "id" : "1a", "name" : "foo" }, { "id" : "1b", "name" : "bar" } ] " You can map this String with JSON array as following

String desiredString = root.path("response").toString();
pojos = objectMapper.readValue(desiredString ,new TypeReference<List<Pojo>>() {});

Upvotes: 0

Enrichman
Enrichman

Reputation: 11337

You can use the generic readTree with JsonNode:

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(json);
JsonNode response = root.get("response");
List<Pojo> list = mapper.readValue(response, new TypeReference<List<Pojo>>() {});

Upvotes: 0

Sotirios Delimanolis
Sotirios Delimanolis

Reputation: 280054

You'll first need to get the array

String jsonStr = "{\"response\" : [ { \"id\" : \"1a\",  \"name\" : \"foo\"},{ \"id\" : \"1b\",\"name\" : \"bar\"  } ]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonStr);
ArrayNode arrayNode = (ArrayNode) node.get("response");
System.out.println(arrayNode);
List<Pojo> pojos = mapper.readValue(arrayNode.toString(), new TypeReference<List<Pojo>>() {});

System.out.println(pojos);

prints (with a toString())

[{"id":"1a","name":"foo"},{"id":"1b","name":"bar"}] // the json array 
[id = 1a, name = foo, id = 1b, name = bar] // the list contents

Upvotes: 5

Related Questions