【问题标题】:Objective-C SBJSON: order of json arrayObjective-C SBJSON:json数组的顺序
【发布时间】:2010-09-21 09:33:27
【问题描述】:

我有一个 iPhone 应用程序,它从服务器获取一个 json 字符串并对其进行解析。它包含一些数据,例如。一组 cmets。但是我注意到当我像这样解析它时,json数组的顺序没有被保留:

    // parse response as json
SBJSON *jsonParser = [SBJSON new];
NSDictionary *jsonData = [jsonParser objectWithString:jsonResponse error:nil];

NSDictionary* tmpDict = [jsonData objectForKey:@"rows"];
NSLog(@"keys coming!");
NSArray* keys = [tmpDict allKeys];
for (int i = 0;i< [keys count]; i++) {
    NSLog([keys objectAtIndex:i]);
}

Json 结构:

    {
   "pagerInfo":{

      "page":"1",

      "rowsPerPage":15,

      "rowsCount":"100"

   },

   "rows":{

      "18545":{

         "id":"18545",

         "text":"comment 1"

      },

      "22464":{

         "id":"22464",

         "text":"comment 2"

      },

      "21069":{

         "id":"21069",

         "text":"comment 3"

      },

 … more items

   }

}

有谁知道如何处理这个问题?非常感谢!

【问题讨论】:

    标签: iphone objective-c json


    【解决方案1】:

    在您的示例 JSON 中,没有数组而是字典。在字典中,键根据定义没有以任何方式排序。因此,您要么需要更改生成 JSON 的代码以真正使用数组,要么对 Cocoa 代码中的键数组进行排序,可能像这样:

    NSArray *keys = [[tmpDict allKeys] sortedArrayUsingSelector: @selector(compare:)];
    

    使用已排序的键数组,您可以创建一个新数组,其中包含正确顺序的对象:

    NSMutableArray *array = [NSMutableArray arrayWithCapacity: [keys count]];
    for (NSString *key in keys) {
        [array addObject: [tmpDict objectForKey: key]];
    }
    

    【讨论】:

    • 谢谢,所以必须订购该 json 中的 id 才能解决该问题?有什么方法可以解析它,以便 [arrayAfterSomeGreatFunction objectAtIndex:0] 返回“comment 1”字符串?
    • 我编辑了我的答案,向您展示了一种使用排序对象创建新数组的可能方法。
    【解决方案2】:

    Cocoprogrmr,

    这是您需要做的:在您解析出您的 json 字符串并将其加载到 NSArray(即上面写有 NSArray* 键 的地方)之后,您可以将其放入一个 for 循环,您可以在其中迭代 keys 数组中的值。接下来,要获取嵌套值,例如,要获取行/文本的值,请使用如下语法:

    for (NSDictionary *myKey in keys)
    {
      NSLog(@"rows/text --> %@",  [[myKey objectForKey:@"rows"] objectForKey:@"text"]);
    }
    

    应该这样做。我的语法在那里可能并不完美,但你明白了。

    安迪

    【讨论】:

      猜你喜欢
      • 2012-10-29
      • 2017-11-04
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多