繁体   English   中英

如何顺序解析NSDictionary?

[英]How to parse NSDictionary sequentially?

我需要解析一个json并以与响应中存在的键值对相同​​的顺序获取它们。

目前我正在做的是

-(instancetype)initWithJson:(NSDictionary *)responseDict {
      if (self = [super init]){
          NSArray *tempArray = [[NSArray alloc] init];

          NSArray *roomSizesForAcArray = [responseDict valueFromDictionaryWithNSNullCheck:@"roomSizesForAc"];
          NSArray *loadChartForInverterArray = [responseDict valueFromDictionaryWithNSNullCheck:@"loadChartForInverter"];
          if(roomSizesForAcArray && roomSizesForAcArray.count>0){
              self.isInverterChart=false;
              tempArray=roomSizesForAcArray;
          }
          else  if(loadChartForInverterArray && loadChartForInverterArray.count>0){
              self.isInverterChart=true;
              tempArray=loadChartForInverterArray;
          }
          self.arrayOfChartSizeObjects=tempArray;

          if(tempArray && tempArray.count>0){

          //Temp array first object is a dictionary which i need to parse sequentially

              self.arrayOfKeys = [[tempArray objectAtIndex:0] allKeys];

          //This array of keys is random every time and not sequential
          }
   }
   return self;
}

我需要以某种方式解析字典[tempArray objectAtIndex:0],以维护init中的键顺序。

不清楚要什么,想要字典,而您已经在解析字典。 要从JSON获取字典,请使用以下代码。

NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:receiveData options:kNilOptions error:&error];

要获取所有密钥,然后检索详细信息,请使用

NSArray *sortedKeys = [[jsonDict allKeys]

拥有钥匙后,即可获取详细信息

NSError *e = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];

if (!jsonArray) {
  NSLog(@"Error parsing JSON: %@", e);
} else {
   for(NSDictionary *item in jsonArray) {
      NSLog(@"Item: %@", item);
   }
}

字典是无序集合。 您说“ ...维护init中的键顺序”。 哪有这回事。

JSON“对象”,即NSDictionaries / Swift字典的JSON等效项,具有相同的问题。

某些JSON库将保留键/值对的发送顺序,但是您不应依赖于此。 JSON协议不保证它。

接收JSON数据并将其转换为NSDictionary / Dictionary ,键/值对的发送顺序就会丢失。 我知道要保留原始JSON数据流中键/值对的(已经不可靠)顺序的唯一方法是自己解析JSON,而不是使用NSJSONSerialization反序列化它。

如果要按特定顺序排列数据,则应使用数组作为容器对象来发送数据。 您可以根据需要发送一组键/值对。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM