1

我正在向 NSArray 添加键值字符串,但它们的添加顺序错误,这让我相信这是错误的做事方式 -

我的 json 采用以下格式:

[{
    "story1":
        {data in here}
    "story2":
                {data in here}....

在我的代码中,我希望在 NSArray 中获取story1和story2(以及更多)的字符串值,我实现了但它们的顺序相反-story2,story1:

NSArray *jsonArr = [NSJSONSerialization JSONObjectWithData:theData options:kNilOptions error:&error];

for (NSString *pItem in [jsonArr objectAtIndex:0]) {
  NSLog(@"Product: %@", pItem);
}

有没有更好的方法来做到这一点,如果没有,我该如何反转数组?

4

2 回答 2

1
// Instead Normal NSArray user NSOrderedSet which preserves the order of objects
NSOrderedSet *orderSet = [NSOrderedSet orderedSetWithArray:jsonArr];

// Access your value From NSOrderedSet same as NSArray
NSDictionary *dict = [orderSet objectAtIndex:0];
NSLog(@"%@",dict);
于 2013-03-18T12:49:32.353 回答
1

您的 JSON 在 JSON 数组中定义了一个 JSON 对象。当您反序列化它时,您将获得一个包含 NSDictionary 的 NSArray,该 NSDictionary 又包含键值对,但 NSDictionary 没有定义键的顺序(JSON 对象也没有)。IE

{ "story1" : "foo", "story2" : "bar" }

{ "story2" : "bar", "story1" : "foo" }

是同一对象的表示。

如果您需要排序,则需要重组 JSON 数据。以下将做的伎俩

[
    { "story1" : { ... } },
    { "story2" : { ... } }
]

或者,当您访问对象中的数据时,您可以先对键进行排序。使用您的示例:

NSArray *jsonArr = [NSJSONSerialization JSONObjectWithData:theData ...];
NSDictionary *jsonDictionary = [jsonArr objectAtIndex: 0];

NSArray* sortedKeys = [[jsonDictionary allKeys] sortedArrayUsingComparator: (^NSComparator)(id obj1, id obj2) { /* a comparator */ }];
for (NSString *key in [sortedKeys]) 
{
    NSLog(@"Product: %@", [jsonDictionary objectForKey: key]);
}
于 2013-03-18T13:05:45.333 回答