Total Pageviews

2017/09/04

[JSON] Using JSONObject to build and parse JSON

Assume we would like to build a user JSON string, it looks like:
{"users":[{"name":"Albert","id":1},{"name":"Mandy","id":2}]}

Steps:
1. Create a User object which have two attributes (id and name)
2.  Create a getUsers method to retrieve dummy user collection 
3. Create buildUserJson() to build JSON string from List of User 
package albert.practice.json;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class JsonObjectTest {

    public static void main(String[] args) {

        JsonObjectTest test = new JsonObjectTest();
        
        String userJSON = test.buildUserJson();
        log.debug("user JSON = " + userJSON);
    }

    public String buildUserJson() {
        List<User> users = getUsers();
        JSONObject dataset = new JSONObject();
        users.stream().forEach(u -> addToDataset(u, dataset));

        return dataset.toString();
    }

    private static void addToDataset(User user, JSONObject dataset) {
        JSONObject userObj = new JSONObject();
        userObj.put("id", user.getId());
        userObj.put("name", user.getName());

        // use the accumulate function to add to an existing value. The value
        // will now be converted to a list
        dataset.accumulate("users", userObj);
    }

    public List<User> getUsers() {
        User albert = new User(1, "Albert");
        User mandy = new User(2, "Mandy");
        return Arrays.asList(albert, mandy);
    }

    @Data
    @AllArgsConstructor
    @ToString
    private static class User {
        private Integer id;
        private String name;
    }

}


If you would like to parse JSON string to List of User, you can check parseUserJson(String json)
    public List<User> parseUserJson(String json) {
        JSONObject jsonObj = new JSONObject(json);
        JSONArray userArray = (JSONArray) jsonObj.get("users");

        List<User> users = new ArrayList<>();

        userArray.forEach(u -> addToList(u, users));

        return users;
    }

    private void addToList(Object user, List<User> users) {
        JSONObject userObj = (JSONObject) user;
        Integer id = (Integer) userObj.get("id");
        String name = (String) userObj.get("name");
        users.add(new User(id, name));
    }




Reference
[1] http://www.studytrails.com/java/json/java-org-json.jsp

No comments: