7

This is possibly a duplicate question.. please refer this link.
I am able to map one json object to POJO.But how can i convert array of json object to pojo using the same jackson framework.

private void jsonToPojo(){
   ObjectMapper mapper=new ObjectMapper();

    try {
        User1 user1=mapper.readValue(readFromFile(), User1.class);
        User1[] user2=mapper.readValue(readFromFile(), User1[].class);
        System.out.println(user1);
        Toast.makeText(getApplicationContext(), "inside try", 0).show();
    } catch (JsonParseException e) {
        // TODO Auto-generated catch block
        Log.i("Exception", "jsonparseexception");
        e.printStackTrace();
    } catch (JsonMappingException e) {
        // TODO Auto-generated catch block
        Log.i("Exception", "jsonmapping exception");
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Log.i("Exception", "ioexception");
        e.printStackTrace();
    }
}

This is the class user object.

public class User {
private int age = 23;
private String name = "amal";
private List<String> messages = new ArrayList<String>() {
    {
        add("hi");
        add("how");
        add("are u.");
    }
};

//getter and setter methods

@Override
public String toString() {
    return "User [age=" + age + ", name=" + name + ", " +
            "messages=" + messages + "]";
}

This is what i tried to do:(readFromFile() takes json from a file)

User1[] user2=mapper.readValue(readFromFile(), User1[].class);

The jsonToPojo() is working well for only one object. However, if i try the above line of code,its not taking the following json:

[ 
 {
   "age":"23",
   "messages":["hi","how","are u."],
   "name":"amal"
 },

 {
   "age":"98",
   "messages":["Reply","my","question"],
   "name":"You"
 }
]
2
  • 1
    I have tested your example JSON and yours code works for me. Are User and User1 classes same or you have two different classes? Commented May 11, 2013 at 22:35
  • user1 is a new class. well i want to store the array of json object in the pojo.. thats what i am not able to. Commented May 13, 2013 at 5:16

1 Answer 1

8

Try something like this:

public class Test {

/**
 * @param args
 */
public static void main(String[] args) {
    User a = new User(23, "amal");
    ArrayList<String> message = new ArrayList<String>();
    message.add("m1");
    message.add("m2");
    a.setMessages(message);

    User b = new User(58, "pete");
    User[] ab = new User[] {a, b};

    ObjectMapper mapper = new ObjectMapper();

    try {
        String s1 = getJson1(a);
        System.out.println(s1);
        User user1 = mapper.readValue(s1, User.class);
        System.out.println(user1);

        System.out.println("----------------");

        String s2 = getJson2(ab);
        System.out.println(s2);
        User[] user2 = mapper.readValue(s2, User[].class);
        for (User u : user2)
            System.out.println(u);

    } catch (Exception e) {
        e.printStackTrace();
    }

}

    private static String getJson1(User user) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(user);
    }

    private static String getJson2(User[] ab) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(ab);
    }

}

public class User {
    private int               age;
    private String            name;
    private ArrayList<String> messages;

    public User() {
        super();
    }

    public User(int age, String name) {
        this();
        this.age = age;
        this.name = name;
    }

    // ****************
    // Getter & Setter ....
    // ****************
}

You will get this Output:

{"age":23,"name":"amal","messages":["m1","m2"]}
User [age=23, name=amal, messages=[m1, m2]]
----------------
[{"age":23,"name":"amal","messages":["m1","m2"]},{"age":58,"name":"pete","messages":null}]
User [age=23, name=amal, messages=[m1, m2]]
User [age=58, name=pete, messages=null]
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks, Helped me out as well.. It was as simple as adding the [ ] behind my "user" class in the mapper.readValue... line

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.