0

我傳遞一個字典列表:獲取值時的NSDictionary包含

aDictionary 

當我登錄它的字典的格式如下:

{ 
value1 = "subValue1 {label=value1, info1=, info2=}"; 
value2 = "subValue2 {label=value2, info1=, info2=}"; 
value3 = "subValue3 {label=value2, info1=, info2=}"; 
} 

我需要遍歷字典然後確定value3是否有值 - > subValue3 - > info2。

我能做的初始迭代,我可以使線的子詞典:

"subValue3 {label=value2, info1=, info2=}" 

但是當我嘗試使用它,說拿到鑰匙的數量,我得到 - [subValue3 allKeys ]:無法識別的選擇器發送到實例。

NSArray *keys; 
int i, count; 
id key, value; 

keys = [aDictionary allKeys]; 
count = [keys count]; 
for (i = 0; i < count; i++) 
{ 
    key = [keys objectAtIndex:i]; 
    value = [aDictionary objectForKey:key]; 
    NSLog (@"Key: %@ for value: %@", key, value); 

    NSDictionary *subDictionary = [aDictionary objectForKey:key]; 
    if ([key isEqualToString:@"info2"]) { 
     DLog(@"subDictioanry = %@", subDictionary); 
     // Everything is fine up to here 
     NSArray *keys2; 
     int i2, count2; 
     id key2, value2; 

     keys2 = [subDictionary allKeys]; 
     count = [keys2 count]; 
     // 
     // Right here I get "-[subValue3 allKeys]: unrecognized selector sent to instance" 
     // 
     for (i2 = 0; i2 < count2; i2++) { 
      key2 = [keys2 objectAtIndex:i2]; 
      value = [subDictionary objectForKey:key]; 
      DLog (@"Key: %@ for value: %@", key2, value2); 

      NSDictionary *subDictionary2 = [subDictionary objectForKey:key2]; 
      DLog(@"subDictionary2 = %@", subDictionary2); 
     } 
    } 

問題: 我不知道這是什麼第二組值的格式爲( 「subValue3 {標籤=值2,INFO1 =,= INFO2}」)。它是一個集合,一個數組,一個字典嗎? 如何將該組加入字典(沒有按鍵(?)「subValue3」)失敗,以便我可以檢查密鑰info2是否有任何值?

免責聲明: 我知道有更有效的方法來迭代字典,我只是想盡可能清楚。 我確定只有一些基本的東西丟失了,但是我沒有在迭代或NSDictionary的Apple文檔中看到答案,也沒有找到關於第二組中的格式的任何信息。 謝謝!

回答

0

現在"subValue1 {label=value1, info1=, info2=}";NSString。因此NSStringallKeys將會崩潰。

逸岸這是否"subValue1 {label=value1, info1=, info2=}";看起來像一個有效的JSON。我不認爲這是一個有效的JSON。即使jsonlint.com也這樣認爲。

這是一個有效的JSON

{ 
    "subValue1": { 
     "label": "value1", 
     "info1": "", 
     "info2": "" 
    } 
} 

您構建後JSON像這樣,然後用NSJSONSerialization轉換 -

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

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

真。但我不想通過將其轉換爲JSON的過程來獲得價值。也許我需要將它解析爲一個字符串。 – addzo

+0

如果你不想轉換JSON,那麼你可以使用正則表達式。 –