json 파싱하기


이런 json 포맷을 이해할 수 있는 자료형으로 파싱하기 위한 다양한 라이브러리들이 있습니다.


기본적으로 java의 JsonObject와 JsonArray로 json을 파싱할 수 있습니다.


{

    "name": "hello!",

    "data": {

        "name": "jspiner",

        "age": 8,

        "birth": 1996

    },

    "friends": [

        "john",

        "smith",

        "sam"

    ],

    "books": [

        {

            "name": "book1",

            "price": 10000

        },

        {

            "name": "book2",

            "price": 15000

        },

        {

            "name": "book3",

            "price": 7000

        }

    ]

}




JsonParser jsonParser = new JsonParser();


JsonObject jsonObject = (JsonObject) jsonParser.parse(json);

JsonObject dataObject = (JsonObject) jsonObject.get("data");


System.out.print("name : " + dataObject.get("name"));

System.out.print("age : " + dataObject.get("age"));

System.out.print("birth : " + dataObject.get("birth"));







직렬화(Serialization) 이용하기


직렬화란 객체를 직렬화하여 전송 가능한 형태로 만드는것을 의미한다. 객체들의 데이터를 특정한 포맷의 연속적인 데이터로 변형하여 데이터를 읽도록 하는 것이다.


java에서는 직렬화를 지원하는 Gson Jackson등의 라이브러리가 있다.


JsonObject로 파싱하던 위 코드를 Gson으로 파싱하기 위해선 우선 객체를 담을 클래스를 구현한다.




class DataJson {


    @SerializedName("name")

    public String name;


    @SerializedName("data")

    public Data data;


    @SerializedName("books")

    public List<Book> books;


    class Data{

        @SerializedName("name")

        public String name;


        @SerializedName("age")

        public int age;


        @SerializedName("birth")

        public int birth;

    }


    class Book{

        @SerializedName("name")

        public String name;


        @SerializedName("price")

        public int price;

    }


}

// @SerializedName은 파싱할때 사용될 key 이름이다.




DataJson dataJson= new Gson().fromJson(json, DataJson.class);


System.out.println("name : " + dataJson.name);


for(DataJson.Book book : dataJson.books){

    System.out.println("book name : " + book.name);

    System.out.println("book price : " + book.price);

}



출처:https://calyfactory.github.io/%EC%A0%9C%EC%9D%B4%EC%8A%A8%ED%8C%8C%EC%8B%B1/

+ Recent posts