2012-04-24 11 views
0

私はYouTubeのプレイリストを解析しようとしています:iOS 5 Google 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タイトル?

単なる簡単なことですが、私は今これについて何時間も頭を叩いています。あなたの提案に感謝します。

[EDIT] は、これは完全な構造です:

{ 
    "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を表示することができますこのように少し混乱しています。 –

答えて

0

問題は、あなたのJSONが有効でないということです。 titlesはすべて配列にする必要がありますか?だから彼らは[]にいなければならない。あなたは、たとえばに「デバッグ」あなたのJSON、次のサイトを利用することができます:あなたは新しいビルトインJSON APIを使用することができるのiOS 5に

http://jsonformatter.curiousconcept.com/また

、。ここではそのための素晴らしいチュートリアルです: 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

ありがとう!私はそれも発明しなかった:) YouTubeの標準APIであるプレイリストのjsonc APIは、実際の世界の例をここで確認する。http://gdata.youtube.com/feeds/api/playlists/6A94E7DAD57DE702?v=2&alt= jsonc)ここで既に物事を書き直すことを検討し始めました。 – MartijndeM

+0

@Martindem Ok :)、...でもYouTubeから提供されているJSONは有効なjsonです。それらは配列としての項目を持ち、配列内の各オブジェクトは辞書です。あなたのサンプルは異なっていて、有効ではありません(jsonに関して)。とにかく、ポストがあなたを少し助けてくれることを願っています。もう一度、幸運;) –

+0

ええ、ちょうど私の簡素化が有効でないことに気づいた*弓頭* /コードにまっすぐに戻る – MartijndeM

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の最初の部分では動作しますが、2番目の部分では動作しません。 Xcodeまた、そのタイトルは未使用の変数であることを報告します。 NSLogはnullを返す。 – MartijndeM

+0

理由は[]にある可能性があります。私はこのNSMutableArray * items = [json valueForkey:@ "items"]; 'とこのNSMutableArray * arrtitle = [[itemsAtIndex:i] valueForkey:@" Video "] copy;同じことをやっている。 2番目の部分に** [] **が含まれていないためです。単にそれはネストしたJSONではありませんでした。あなたはおそらくこれのための本当のパーサーが欲しいでしょう。ちょうど私の2セント。 – Byte

+0

json階層は配列>辞書>辞書です。私たちはディーケイキービデオのために数えなければなりません。私たちは3つ以上の辞書を取得します。 –

3

これを試してみてください。

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

いいえ、効果もありません。また、@ before項目と大文字のvalueForKeyを追加する必要がありました。 – MartijndeM

関連する問題