본문 바로가기
Language/Java

[Java] JSON.simple 라이브러리를 사용해서 JSON을 핸들링 하자!!!!

by 나비와꽃기린 2016. 10. 20.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


JSON 예제(1) _ Java에서 JSON 데이타 생성하고 파일쓰기



json_simple-1.1.jar을 직접 다운받거나 maven project라면 다음과 같은 디펜던시 추가.


<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>

public static void main(String[] args) {
	
	JSONObject personInfo  = new JSONObject();
	personInfo .put("name", "Garry");
	personInfo .put("age", 20 );
	personInfo .put("jobInfo ", "programmer" );
 
	JSONArray hobbyList = new JSONArray();
	hobbyList.add("programming");
	hobbyList.add("baking");
	hobbyList.add("tiyping");
 
	personInfo .put("messages", hobbyList);
 
	try {
 
		FileWriter file = new FileWriter("c:\\test.json");
		file.write(personInfo.toJSONString());
		file.flush();
		file.close();
 
	} catch (IOException e) {
		e.printStackTrace();
	}
 
	System.out.print(personInfo);
}

<<output>>

{"jobInfo ":"programmer","name":"Garry","messages":["programming","baking","tiyping"],"age":20}




JSON 예제(2) _ .json 파일 읽어 JSON 파싱하기1



test.json에는 data 포멧이 다음과 같이 작성되어져 있다.

여기서 잠깐 address부분을 보고 가자. address라는 키와 대괄호([])로 감싸진 부분이 콜론(:)으로 이어져 있음을 볼 수 있다.
이 전체가 하나의 JSON Object가 되어 "address"는 키값이 되고 []로 감싸진 부분은 값이 되는 것이다.

{
	"id":123,
	"name":"Pankaj Kumar",
	"permanent":true,
	"address":[{
			"street":"El Camino Real",
			"city":"San Jose",
			"zipcode":"95014"
		}],
	"phoneNumbers":["9988664422", "1234567890"],
	"role":"Developer"
}

하나하나 파싱해서 data를 뽑아와보자.


public static void main(String[] args) {

	JSONParser parser = new JSONParser();
	 
	try {
 
		Object obj = parser.parse(new FileReader("d:\\test.json"));
 
		JSONObject jsonObject = (JSONObject) obj;
 
		String name = (String) jsonObject.get("name");
		System.out.println("name :: " +name);
 
		long id = (Long) jsonObject.get("id");
		System.out.println("id :: " + id);
 
		// Array
		JSONArray phoneNum = (JSONArray) jsonObject.get("phoneNumbers");
		Iterator<String> iterator = phoneNum.iterator();
		while (iterator.hasNext()) {
			System.out.println("phoneNumbers :: " + iterator.next());
		}
		
		//Object
		JSONArray array = (JSONArray) jsonObject.get("address");
		for(int i=0; i<array.size(); i++){
			JSONObject result = (JSONObject) array.get(i);
			System.out.println("result :: " +result.get("zipcode"));
		}
		
		
		
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} catch (ParseException e) {
		e.printStackTrace();
	}
	
}

<<output>>


name :: Pankaj Kumar

id :: 123

phoneNumbers :: 9988664422

phoneNumbers :: 1234567890

result :: 95014



JSON 예제(3) _ .json 파일 읽어 JSON 파싱하기2


다음과 같은 JSON Object의 properties를 파싱해 보자.


{
        "name":"Product",
        "properties":
        {
                "id":
                {
                        "type":"number",
                        "description":"Product identifier",
                        "required":true
                },
                "name":
                {
                        "description":"Name of the product",
                        "type":"string",
                        "required":true
                },
                "price":
                {
                        "type":"number",
                        "minimum":0,
                        "required":true
                },
                "tags":
                {
                        "type":"array",
                        "items":
                        {
                                "type":"string"
                        }
                }
        }
}

JSONParser parser = new JSONParser();
 
try {

	Object obj = parser.parse(new FileReader("d:\\test.json"));
	JSONObject jsonObject = (JSONObject) obj;

	Map<String, Object> map = new HashMap<String, Object>();
	JSONObject jsonObj = (JSONObject) jsonObject.get("properties");

	Iterator<String> keysItr = jsonObj.keySet().iterator();
	while (keysItr.hasNext()) {
		
		String key = keysItr.next();
    Object value = jsonObj.get(key);

    System.out.println(key + " : " + value);
    
    if(value instanceof JSONArray) {
	//System.out.println("json array");
    }

    else if(value instanceof JSONObject) {
	//System.out.println("json object");
    }
    map.put(key, value);
	}
	
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
} catch (ParseException e) {
	e.printStackTrace();
}

<<output>>


price : {"type":"number","minimum":0,"required":true}

name : {"description":"Name of the product","type":"string","required":true}

id : {"description":"Product identifier","type":"number","required":true}

tags : {"type":"array","items":{"type":"string"}}



JSON 예제(4) _ JSON String 을 JSONObject로 변환하기


다음과 같이 stat이라는 key로 묶인 JSON String을 자바에서 JSONObject로 변환해보자.


JSONParser parser = new JSONParser();

String jsonString = "{\"stat\":{\"sdr\": \"aaaaaaaaaaaaaaaaaaaaa\",\"rcv\": \"bbbbbbbbbbbbbbbbbbbb\",\"time\": \"UTC in millis\""
		+ ",\"type\": 1,\"subt\": 1,\"argv\": [{\"1\":2},{\"2\":3}]}}";


try {
	Map	json = (Map)parser.parse(jsonString);
	
	Iterator iter = json.entrySet().iterator();
	Object entry = json.get("stat");
	
	System.out.println(entry);
	System.out.println( entry.getClass() );
	
} catch (ParseException e) {
	e.printStackTrace();
}