2013-06-25 23 views
0

我正在將一個JSON文件序列化爲nsmutabledictonary。 JSON文件的格式爲:ios如何從nsmutabledictionary訪問json結構中的節點

{ 
    "menu": { 
     "id": "file", 
     "value": "Files", 
     "menuoffiles": { 
      "menuitem": [ 
       { 
        "value": "New", 
        "date": "03162011" 
       }, 
       { 
        "value": "Open", 
        "date": "03162012" 
       }, 
       { 
        "value": "Close", 
        "date": "03162014" 
       } 
      ] 
     } 
    } 
} 

我的問題是從的NSMutableDictionary我如何可以訪問「打開」或「關閉」鍵的值?

我真的很感謝你的幫助。

+0

這與Xcode無關。順便說一句:''[@「menuoffiles] [1] [@」value「]'。 – 2013-06-25 16:47:09

+0

@ H2CO3:我認爲他只需要打開和關閉,所以對於最後一個'key',他必須使用循環,if -else。:p –

+0

@AnoopVaidya Marginal。 – 2013-06-25 16:51:45

回答

0

因此,最好的方法是使用NSLog打印出字典的格式。無論如何,您應該能夠通過objectForKey訪問頂層對象,然後通過objectForKey在內部層次上對象,或者如果數組不是字典,則通過遍歷它們。

3

試試這個(你不能做一個單一的步驟,你不能索引到陣列,同時作爲字典):

NSArray *menuItems = [dict valueForKeyPath:@"menu.menuoffiles.menuitem"]; 

現在你可以遍歷:

for (NSDictionary *menuItem in menuItems) { 
    if ([[menuItem objectForKey:@"value"] isEqualToString:@"Open"]]) { 
     //... 
    } 
} 

或過濾器:

NSArray *openTimes = [menuItems filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"value == %@", @"Open"]]; 

根據您要使用的結果是什麼。

+0

Yeaaaahhhhhh .... –

+0

請注意(正如H2CO3指出的那樣),您現在可以使用[字典樣式下標](http://clang.llvm.org/docs/ObjectiveCLiterals.html –

+0

@RussellZahniser,這是真的,但它會對數組的順序做出額外的假設,並且valueForKeyPath不會被縮短,所以它是一個折衷的結果。 – Wain