常见任务,将字符串转换为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
答案 0 :(得分:3)
NSDictionary
中的键/值对没有订单。您可以按顺序添加它们,但不会在字典中维护订单信息。因此,当您创建JSON时,它会以任意顺序出现。
如果您需要某个顺序的内容,那么您应该不使用字典,或者应该按照您想要的顺序将项目流式传输到JSON中(例如,使用SBJson4StreamWriter
)。