Tag Archives: JSON

[Java] Json 라이브러리의 최고봉 Gson 수동으로 배열 처리하기

구글의 Json 라이브러리인 [Gson]는 확실히 멋진 라이브러리입니다. 어떤식으로든지 객체와 1:1매핑되어 정확하게 값이 타입에 맞게 들어가는 것을 보면 놀라지 않을 수 없습니다.

그런데 이것이 너무 편하다 보니 매번 POJO객체를 만들어야 한다거나 또는 이 편리함이 오히려 복잡함으로 다가오게 만들정도의 획일화된 사용법을 제공하는등 마냥 편한건 아닌것 같더군요.

하지만 좀더 알아보니 방법이 없는게 아니라 제가 모르는 것이었습니다. [이곳]에 나와있는 예제를 첨부해 보겠습니다.
[code]Gson gson = new Gson();

Collection collection = new ArrayList();
collection.add(“hello”);
collection.add(5);
collection.add(new Event(“GREETINGS”, “guest”));

String json = gson.toJson(collection);
System.out.println(“Using Gson.toJson() on a raw collection: ” + json);[/code]
위와 같은 코드를 실행해서 배열을 Json으로 변환하는 예제를 실행해 보았습니다. 위의 예제는 사실상 전혀 이해 못할것이 없는 당연스러운 코드 입니다. 하지만 다음의 경우는…일단 저는 모르고 있었네요.
[code]JsonParser parser = new JsonParser();

JsonArray array = parser.parse(json).getAsJsonArray();

String message = gson.fromJson(array.get(0), String.class);
int number = gson.fromJson(array.get(1), int.class);
Event event = gson.fromJson(array.get(2), Event.class);

System.out.printf(“Get: %s, %d, %s”, message, number, event);[/code]
위와 같이 일일이 수작업으로 원하는 만큼만의 작업을 할 수 있습니다. Java 5.0이상부터라면 다음과 같은 구문을 사용할 수도 있습니다.
[code]JsonParser parser = new JsonParser();

JsonArray array = parser.parse(json).getAsJsonArray();

for(JsonElement element : array)
{
  // …
}[/code]

참고 :
http://code.google.com/p/google-gson/source/browse/trunk/extras/src/main/java/com/google/gson/extras/examples/rawcollections/RawCollectionsExample.java

https://sites.google.com/site/gson/gson-user-guide 

[iPhone] JSON Framework 사용하기

아이폰에서 서버와의 단순한 비동기 통신을 위해 어떤 방법이 있을까를 고민해 보다 보니  JSON만한게 없더군요.

단순한 문법과 실제로 웹페이지와 이원화 구현에서도 문제업속 무엇보다 통신시에 XML과 비교하면 데이터의 양이 확연히 줄어드는 결과를 얻어올 수 있습니다.

이번에 소개시켜 드릴 물건(?)은 JSON Framework입니다. 현재 Code Google에서 오픈 소스로 프로젝트가 진행중이며 실제로 여러 앱스토어에서 판매중인 어플리케이션등에 사용된 전력이 있습니다.

프로젝트 사이트를 방문 하실려면 [이곳]을 방문하세요. 우선 다운로드 페이지에 가서 최신버젼의 dmg파일을 받습니다.

그안에는 여러가지 파일이 있는데요, 다음을 차근차근 진행하여 설치하도록 합니다.

1. SDKs 디렉토리를 ~/Library/SDKs로 복사합니다.
2. JSON.framework 디렉토리를 ~/Library/Frameworks로 복사합니다.
3. 프로젝트 설정창에서 Additional SDKs안에 $HOME/Library/SDKs/JSON/$(PLATFORM_NAME).sdk를 추가합니다.
4. Other Linker Flags-ObjC -ljson를 추가합니다.

혹시 못찾을 분들을 위해 스크린샷을 준비해봤습니다.
사용자 삽입 이미지추가로 문서를 설치하고 싶다면 Documentation안의 html폴더를 로컬로 복사한 후에 디렉토리 안에서 다음의 명령을 통해 설치가능합니다.

[code]# sudo -s make install[/code]

프레임워크를 이용하여 사용하는 방법도 있는데 시도해 보니 다음과 같은 에러를 만나게 되더군요; 그냥 SDK를 사용하도록 합시다.
사용자 삽입 이미지이제 예제 코드를 실행해 보도록 할까요. 이때에 꼭 #import <JSON/JSON.h>를 넣어주도록 하는걸 잊지 맙시다.

[code]- (void)applicationDidFinishLaunching:(UIApplication *)application {
   
    NSDictionary *dict;
    NSString *key;
   
    // JSON 문법으로 변환할 데이터 생성
    dict = [NSDictionary dictionaryWithObjectsAndKeys:
            @”eye”, @”name”,
            @”http://theeye.pe.kr”, @”home”,
            @”27″, @”age”,
            nil];
   
    // JSON 라이브러리 생성
    SBJSON *json = [SBJSON new];
    [json setHumanReadable:YES];
   
    // 변환
    NSString *result = [json stringWithObject:dict error:nil];
    NSLog(@”converted data :\n%@”, result);
   
    // 이전데이터를 소거함을 증명
    dict = nil;
   
    // JSON 문자열을 객체로 변환
    dict = [json objectWithString:result error:nil];
   
    // 결과 출력
    for (key in dict) {
        NSLog(@”Key: %@, Value: %@”, key, [dict valueForKey:key]);
    }

    [window makeKeyAndVisible];
}[/code]
위의 코드를 실행해 보시면 다음과 같은 결과를 보실 수 있습니다. JSON과 객체와의 변환이 자유롭게 되는것을 보실 수 있습니다.
사용자 삽입 이미지1182853027.zip