2014-02-23 1 views
1

문자열을 JSON 형식으로 변환하는 일반적인 작업. 네, 쉽고, 이것에 대한 StackOverflow에 대한 많은 답변이 있습니다.JSON 형식 : 올바른 순서로 출력하기

쉽게 이해할 수없는 것은 내가 얻는 순서가 NSDictionary에 쌍 개체를 놓는 순서와 다른 이유입니다.

-(NSString*)createJSONstring 
{ 
    //http://www.raywenderlich.com/5492/working-with-json-in-ios-5 
    NSDictionary* dictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
           @"<xx3-xxxx>",@"from", 
           @"<xxx-xxx>",@"to", 
           @"<Bla bla bla>",@"message", 
           @"<2000>",@"posixtime", nil]; 

    NSArray* notifications = [NSArray arrayWithObjects:dictionary, nil]; 

    NSError *writeError = nil; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:notifications options:NSJSONWritingPrettyPrinted error:&writeError]; 
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
    NSLog(@"JSON Output: %@", jsonString); 

    return jsonString; 
} 

내가 이런 일을 기대할 것입니다 : 내가 쓴 코드의

{ 
    "from" : "<xx3-xxxx>" 
    "to" : "<xxx-xxx>", 
    "message" : "<Bla bla bla>", 
    "posixtime" : "<2000>", 
    } 

는하지만 다른 순서로 얻을 :

{ 
    "posixtime" : "<2000>",  <----- INCORRECT 
    "to" : "<xxx-xxx>", 
    "message" : "<Bla bla bla>", 
    "from" : "<xx3-xxxx>"   <----- INCORRECT 
    } 

어떻게을 나는 그것을 배열에 삽입 할 때 동일한 순서로 결과를 얻는다. NSDictionary

[NSDictionary dictionaryWithObjectsAndKeys:     //I want it to be: 
            @"<xx3-xxxx>",@"from",   //1st 
            @"<xxx-xxx>",@"to",   //2nd 
            @"<Bla bla bla>",@"message", //3rd 
            @"<2000>",@"posixtime", nil]; //4th 
+1

일반적으로 사전을 사용하면 키를 기준으로 값에 액세스하므로 주문과 관련이 없습니다. 키순 항목을 일관된 순서로 사용해야하는 유스 케이스를 확장 할 수 있습니까? – GnarlyDog

+0

JSON "객체"에서 키/값 쌍의 순서가 유지되지 않을 수도 있습니다. –

+0

json.org : "객체는 정렬되지 않은 * 이름/값 쌍의 집합입니다." –

답변

3

키/값 쌍에는 순서가 없다. 이 순서대로 추가 할 수는 있지만 사전 정보는 사전 내에 유지되지 않습니다. 따라서 JSON을 만들면 임의의 순서로 나옵니다.

콘텐츠가 특정 순서로 필요한 경우 사전을 사용하지 않거나 원하는 순서대로 항목을 JSON으로 스트리밍해야합니다 (예 : SBJson4StreamWriter).

+1

물론 상대방의 파서가 순서 유지를 보증하지 않습니다. JSON "객체"의 항목은 정렬되지 않은 것으로 간주되어야합니다. –

+0

@HotLicks, 나는 그들이 (정렬되지 않은 것으로 간주되어야 함) 동의해야하지만 때로는 주문에 의미를 부여한 다른 파티와 통합해야 할 필요가 있다는 것에 동의합니다. - 언제나 재미 있습니다 ... – Wain

+1

반대편에 항목이 필요하면 어떤 순서는 아마도 다른 많은 것들도 잘못하고있을 것입니다. –