[英]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.