2014-08-30 22 views
-1

提取特定元素我有一個JSON文件看起來像這樣在我的項目:如何從JSON

{ 
"city": [ 
     { 
     "NewYork": [ 
          { 
          "url_id": "63", 
          "title": "someTitle" 
          }, 
          { 
          "url_id": "62", 
          "title": "someOtherTitle" 
          } 
          ], 
     "Boston": [ 
          { 
          "url": "68", 
          "title": "someTitle" 
          } 
          ] 
    . 
    . 
    . 

然後我試圖通過它在Objective-C和創建的只有一個數組城市名稱。我能夠記錄整個JSON或「紐約」的屬性,但不僅僅是名稱。

是我的JSON錯誤還是我在代碼中做錯了什麼?

編輯:我忘了提及一些城市可能有多個ID和標題,所以我認爲創建字典是沒有問題的?此外,我有一個文件中的數據,所以我沒有在代碼中創建它。

+0

可能重複的[如何在ios中迭代JSON對象](http://stackoverflow.com/questions/16996624/how-to-iterate-json-object-in-ios) – memmons 2014-08-30 19:39:27

+0

我已閱讀並接受此答案和其他許多人。這裏的問題是JSON是由我製作的,所以我不確定它的格式是否正確,或者我做了其他錯誤。 – Pahnev 2014-08-30 19:50:25

+0

*我是JSON文件*您是JSON文件或您的句子缺少動詞。 – vikingosegundo 2014-08-30 19:52:32

回答

0

這個JSON似乎不太正確。該cities值應該只是一本字典:

{ 
    "cities" : { 
    "Boston" : [ 
     { 
     "url_id" : "63", 
     "title" : "someTitle" 
     }, 
     { 
     "url_id" : "62", 
     "title" : "someOtherTitle" 
     } 
    ], 
    "New York" : [ 
     { 
     "url_id" : "63", 
     "title" : "someTitle" 
     }, 
     { 
     "url_id" : "62", 
     "title" : "someOtherTitle" 
     } 
    ] 
    } 
} 

如果你想獲得城市的名字從上面的JSON數組,你會將此轉換爲字典和使用來自cities鍵返回值的allKeys

NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; 
NSArray *cityNames = [dictionary[@"cities"] allKeys]; 

就個人而言,我認爲這將是更明智的JSON字典的數組,所在城市名稱是字典的屬性您cities值:

{ 
    "cities" : [ 
    { 
     "name" : "New York", 
     "urls" : [ 
     { 
      "url_id" : "63", 
      "title" : "someTitle" 
     }, 
     { 
      "url_id" : "62", 
      "title" : "someOtherTitle" 
     } 
     ] 
    }, 
    { 
     "name" : "Boston", 
     "urls" : [ 
     { 
      "url_id" : "63", 
      "title" : "someTitle" 
     }, 
     { 
      "url_id" : "62", 
      "title" : "someOtherTitle" 
     } 
     ] 
    } 
    ] 
} 

在這種情況下,你會獲取城市名稱,像這樣:

NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; 
NSArray *cityNames = [dictionary[@"cities"] valueForKey:@"name"]; 

但在問題提出的JSON似乎有一些多餘的[,恕我直言。我認爲city的關鍵名稱是誤導性的,因爲它包含多個城市,所以我建議cities

+0

謝謝你這個工作!猜猜我應該多檢查一下JSON語法。我剛剛刪除了第一個[]括號,代碼開始工作。 – Pahnev 2014-08-30 23:28:41

0

您必須首先創建一個包含城市鍵和城市鍵必須分配給數組的字典。

NSDictionary *newYorkDict = { 
           @"url_id":@"63", 
           @"title":@"someTitle" 
           }; 

    NSDictionary *bostonDict = {@"url_id":@"63", 
           @"title":@"someTitle" 
           }; 

    NSArray *newYorkArray = [newYorkDict]; 
    NSArray *bostonArray = [bostonDict]; 

    NSDictionary *dict = { 
         @"New york":newYorkArray, 
         @"Boston":bostonArray 
         }; 

    NSArray *cityArray = [dict]; 

    NSDictionary *mainDict = {@"city":cityArray}; 
+0

我想直接用字典和數組來做,但決定嘗試使用JSON,因爲有些城市會有多個標題和ID。 – Pahnev 2014-08-30 19:36:36