簡體   English   中英

如何解析嵌套的 JSON

[英]How to parse a Nested JSON

感謝您閱讀我的帖子,我知道這個話題被問了很多次,我看到了但沒有運氣......

我想解析一個簡單的JSON字符串,如下:

[
   {
      "id":"1",
      "name_en":"Photography",
      "subchannels":[
         {
            "id":"4",
            "name_en":"John"
         },
         {
            "id":"18",
            "name_en":"Sam"
         }
      ]
   },
   {
      "id":"7",
      "name_en":"Equipment",
      "subchannels":[
         {
            "id":"25",
            "name_en":"ABC Company"
         },
         {
            "id":"40",
            "name_en":"CDE Company"
         }
      ]
   }
]

它已將此字符串轉換為 NSDictionary

NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary *testDic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&e];

然后我列出字典鍵

for(id key in testDic) {
        NSLog(@"%@", key);
    }

結果是整個記錄作為字典鍵,所以我不能使用 [testDic objectForKey:key] 來檢索值。

如何獲取第一行 name_en 和第二行子通道值? (是否可以像 XML 中的 xpath 一樣輕松檢索?)

感謝您的幫助。

首先。 模型的根對象是NSArray對象 - 而不是 `NSDictionary。 '[]' 表示數組,{} 表示字典。

NSArray *dataArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&e];

for (NSDictionary *entry in dataArray) {
  NSString *name = entry[@"name_en"];
  NSArray *subchannels = entry[@"subchannels"]; //array of dictionaries

  NSLog(@"Name %s", name); 

  for  (NSDictionary *subchannel in subchannels) {
     NSLog(@"Subchannels name %@ id: %d", subchannel[@"name"], [subchannel[@"id"] integerValue]);
  }
}

如果您想執行高級 JSON 解析,我鼓勵您查看Mantle github 項目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM