본문 바로가기

Language/Java / JSP

[Java] Json 파싱(Json -> Map 변환)

반응형

지난번에 java에서 json을 쉽게 생성하는 법을 포스팅한 적이 있다.[바로가기]

오늘은 json을 java에서 파싱하는 방법에 대한 설명이다.


java에서 json을 파싱하여 사용하는 방법으로는 여러가지 라이브러리가 존재한다.
대표적으로 많이 사용하는게 JsonObject 인데, 오늘 내가 소개할 방법은 기존에 소개한 json 생성과 마찬가지로
jackson-json 라이브러리를 사용하는것이다.



나는 개인적으로 map 같은 데이터 형태를 선호한다. 단지 사용하기 편해서랄까?
그런 의미로 json을 map 으로 변환해 보겠다. 일단 라이브러리를 다운받아 클래스패스에 등록하자.


http://jackson.codehaus.org/




예제로 사용할 json 샘플은 다음과 같다.


{
    "name": {
        "first": "Joe",
        "last": "Sixpack"
    },
    "gender": "MALE",
    "verified": false,
    "userImage": "Rm9vYmFyIQ=="
 }



1. json to map 코드

import java.io.IOException;
import java.util.HashMap;

import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;


public class JsonToMap {

	public static void main(String[] args) {
		
		/**
		 {
			  "name" : { "first" : "Joe", "last" : "Sixpack" },
			  "gender" : "MALE",
			  "verified" : false,
			  "userImage" : "Rm9vYmFyIQ=="
		 }
		 */
		
		
		
		StringBuffer sbuf = new StringBuffer();
		sbuf.append("{") ;
		sbuf.append("\"name\" : { \"first\" : \"Joe\", \"last\" : \"Sixpack\" },") ;
		sbuf.append("\"gender\" : \"MALE\",") ;
		sbuf.append("\"verified\" : false,") ;
		sbuf.append("\"userImage\" : \"Rm9vYmFyIQ==\"") ;
		sbuf.append("}") ;
		
		try {
			HashMap<String, Object> rs = new ObjectMapper().readValue(sbuf.toString(), HashMap.class) ;
			
			System.out.println("==hashmap 출력==") ;
			System.out.println(rs) ;
			
			System.out.println() ;
			
			String gender = (String)rs.get("gender") ;
			boolean verified = (Boolean)rs.get("verified") ;
			
			HashMap<String, Object> name = (HashMap)rs.get("name") ;
			
			System.out.println("==변수 출력==") ;
			System.out.println(gender) ;
			System.out.println(verified) ;
			System.out.println("first name : " + name.get("first")) ;
			System.out.println("last name : " + name.get("last")) ;
			
			
			
			
			
		} catch (JsonParseException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		

	}

}


2. 출력 결과

==hashmap 출력==
{verified=false, name={first=Joe, last=Sixpack}, userImage=Rm9vYmFyIQ==, gender=MALE}

==변수 출력==
MALE
false
first name : Joe
last name : Sixpack






Tip)다음은 Jackson-json 에서 제공하는 데이터 형식에 관한 내용이다. 


JSON Type

Java Type

object

LinkedHashMap<String,Object>

array

ArrayList<Object>

string

String

number (no fraction)

Integer, Long or BigInteger (smallest applicable)

number (fraction)

Double (configurable to use BigDecimal)

true|false

Boolean

null

null