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

常见任务,将string转换为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 

NSDictionary的键/值对没有顺序。 您可以按顺序添加它们,但字典中没有订单信息。 所以,当你创buildJSON时,它会以任意顺序出现。

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