JSON格式:以正确的顺序获取输出

时间:2014-02-23 19:35:03

标签: ios objective-c json nsdictionary nsdata

常见任务,将字符串转换为JSON格式。是的,很简单,就StackOverflow而言,有很多答案。

对我而言,理解为什么我得到的顺序与我在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 dictionaryWithObjectsAndKeys:                  //I want it to be:
                                    @"<xx3-xxxx>",@"from",         //1st
                                    @"<xxx-xxx>",@"to",            //2nd
                                    @"<Bla bla bla>",@"message",   //3rd
                                    @"<2000>",@"posixtime", nil];  //4th

1 个答案:

答案 0 :(得分:3)

NSDictionary中的键/值对没有订单。您可以按顺序添加它们,但不会在字典中维护订单信息。因此,当您创建JSON时,它会以任意顺序出现。

如果您需要某个顺序的内容,那么您应该不使用字典,或者应该按照您想要的顺序将项目流式传输到JSON中(例如,使用SBJson4StreamWriter)。