2012-04-24 99 views
0

我試圖解析一個YouTube播放列表:iOS 5谷歌JSON - 如何解析嵌套的對象?

如果我的JSON的結構類似:

{"apiVersion" .... 
"items":[{"id2":"some-id","title":"songtitle", 

我完全能夠通過解析標題:

// Fill array 
NSArray *items = [json objectForKey:@"items"]; 

// Get item from tableData 
NSDictionary *item = [tableData objectAtIndex:[indexPath row]]; 
// Set text on textLabel 
[[cell textLabel] setText:[item objectForKey:@"title"]]; 

但如果JSON是這樣的:

{"apiVersion" .... 
"items":[{"id1": .... "video":{"id2":"some-id","title":"songtitle", 

我怎樣才能達到嵌套目標ct標題?

只是一個簡單的事情,但我現在敲我的頭在這幾個小時。感到沮喪,謝謝你的建議!

[編輯] 這是一個完整的結構:

{ 
    "items": 
    [ 
    { 
    "video": 
      { 
       "title": "Number One", 
       "description": "Description one" 
      },  
      { 
      "title": "Number two", 
       "description": "Description two" 
      }, 
      { 
       "title": "Number three", 
       "description": "Description three" 
      } 
    }, 
    { 
    "video": 
      { 
     "title": "Number One", 
      "description": "Description one" 
      }, 
      { 
       "title": "Number two", 
       "description": "Description two" 
      }, 
      { 
       "title": "Number three", 
       "description": "Description three" 
      } 
    } 

    ] 
} 
+1

你能證明你的整個JSON ,它有點混淆這種方式... – 2012-04-24 12:41:48

回答

0

的問題是,你的JSON是無效的。所有的titles應該在數組中對嗎?所以他們必須在[]中。您可以使用例如下面的網站「調試」你的JSON:

http://jsonformatter.curiousconcept.com/

此外,在iOS 5中,你可以使用新的內置JSON API。這裏是一個很好的教程是: http://www.raywenderlich.com/5492/working-with-json-in-ios-5

儘管如此,這裏是你的JSON應該什麼樣子我想:

{ 
    "items":[ 
     { 
     "video":[ 
      { 
       "title":"Number One", 
       "description":"Description one" 
      }, 
      { 
       "title":"Number two", 
       "description":"Description two" 
      }, 
      { 
       "title":"Number three", 
       "description":"Description three" 
      } 
     ] 
     }, 
     { 
     "video":[ 
      { 
       "title":"Number One", 
       "description":"Description one" 
      }, 
      { 
       "title":"Number two", 
       "description":"Description two" 
      }, 
      { 
       "title":"Number three", 
       "description":"Description three" 
      } 
     ] 
     } 
    ] 
} 

與您的項目好運;)

+0

謝謝!我沒有發明它:)它的標準jsonc youtube API吐出播放列表(在這裏查看真實世界的示例:http://gdata.youtube.com/feeds/api/playlists/6A94E7DAD57DE702?v=2&alt= jsonc)已經開始研究重寫這裏和那裏的東西。 – MartijndeM 2012-04-25 07:19:13

+0

@Martindem OK :),但是仍然從YouTube提供的JSON是有效的json。他們有作爲數組的項目,數組中的每個對象都是一個字典。您的示例有不同的並且無效(以json的形式)。無論如何,我希望這個帖子對你有所幫助。再一次,祝你好運;) – 2012-04-25 07:46:00

+0

是的,只是注意到我的簡化是無效的*弓頭* /直接潛入代碼 – MartijndeM 2012-04-25 08:05:00

1
NSMutableArray *items = [json valueForkey:@"items"]; 
for(int i =0;i<[items count]; i++) 
{ 
    NSMutableArray *arrtitle = [[[items objectAtIndex:i]valueForkey:@"Video"]copy]; 
    for(int j =0;j<[arrtitle count]; j++) 
    { 
    NSString *title = [[arrtitle objectAtIndex:j]valueForkey:@"title"]; 
    } 
} 

也許這會幫助你。

+0

沒有,無濟於事,工作的第一塊JSON,但不是第二塊。 Xcode還報告說,標題是一個未使用的變量。 NSLog回聲爲空。 – MartijndeM 2012-04-24 18:15:57

+0

原因可能是[]。我猜測,這種'的NSMutableArray *項目= [JSON valueForkey:@ 「項目」];'這'的NSMutableArray * arrtitle = [[[項目objectAtIndex:我] valueForkey:@ 「視頻」]複製]'不做同樣的事情。由於第二部分不包含** [] **。簡單來說,它不是嵌套的JSON。你可能需要一個真正的解析器。只是我2美分。 – Byte 2012-04-24 20:25:19

+0

json層次結構是array> dictionary> dictionary。所以我們必須爲小說關鍵視頻計數。所以我們得到更多的三本詞典。 – 2012-04-25 04:55:54

3

試試這個:

NSArray *items = [[json valueForkey:@"items"]valueForkey:"video"]; 
+0

不,也沒有效果。還必須添加@之前的項目和大寫的valueForKey。 – MartijndeM 2012-04-24 18:17:44