2011-02-09 12 views
0

を使用してJSONオブジェクトを読み込むトラブル私は次のようなJSONオブジェクトを読み取るしようとしているのObj-C

{ 
Sections =  { 
    Now = "Wednesday 9 February 2011 02:40"; 
    Section =   (
        { 
      Article =     (
            { 
        Exceprt = "text here"; 
        ID = 49011; 
        Title = "text here"; 
        Type = Politics; 
        audioCounter = 0; 
        commentsCounter = 0; 
        hasMore = false; 
        important = False; 
        likesCounter = 0; 
        photoCounter = 0; 
        time = "21:12"; 
        timeStamp = "2/8/2011 9:14:16 PM"; 
        timeStatus = True; 
        videoCounter = 0; 
        viewsCounter = 0; 
       }, 
            { 
        Exceprt = "text here"; 
        ID = 49010; 
        Title = "text here"; 
        Type = Politics; 
        audioCounter = 0; 
        commentsCounter = 0; 
        hasMore = false; 
        important = True; 
        likesCounter = 0; 
        photoCounter = 0; 
        time = "20:45"; 
        timeStamp = "2/8/2011 9:10:59 PM"; 
        timeStatus = True; 
        videoCounter = 0; 
        viewsCounter = 0; 
       }, 
            { 
        Exceprt = "text here"; 
        ID = 49008; 
        Title = "text here"; 
        Type = Politics; 
        audioCounter = 0; 
        commentsCounter = 0; 
        hasMore = false; 
        important = False; 
        likesCounter = 0; 
        photoCounter = 0; 
        time = "20:28"; 
        timeStamp = "2/8/2011 9:09:44 PM"; 
        timeStatus = True; 
        videoCounter = 0; 
        viewsCounter = 0; 
       } 
      ); 
      ID = 22; 
      Name = "EN Live"; 
      totalNews = 3416; 
     } 
    ); 
}; 
} 

JSON-フレームワークとOBJ-Cを使用して私の意図は、辞書の記事(リストのリストを持つことです)後で簡単にアクセスできるようになりました。私はこれにしばらく立ち往生していて、私のコードはNSArrayのために存在しないメソッドを呼び出すことについて私にエラーを与えています。これは私がjsonオブジェクトを誤解していると思わせました。私はこれに完全に新しいですし、どんな助けも大歓迎です。

ここに私のコードは次のとおりです。

NSDictionary *results = [jsonString JSONValue]; 
NSDictionary *Articles = [[results objectForKey:@"Sections"] objectForKey:@"Section"]; 
NSArray *ListOfArticles = [Articles objectForKey:@"Article"]; 

for (NSDictionary *article in ListOfArticles) 
{ 

    NSString *title = [article objectForKey:@"Title"]; 
    NSLog(title); 
} 

ありがとう!

+0

注:Exceprtはミスペルトです。正しいスペルは抜粋です。 –

+0

いいね!残念ながら私はそれ以上のコントロールはありません:) – Pepe

答えて

1

まず、有効なJSONデータではありません。名前(名前と値のペア)は文字列であり、引用符で囲む必要があります。文字列値は常に引用符で囲む必要があります。ブール値はtrueまたはfalse(小文字)のいずれかである必要があります。

  1. がトップレベル値が
  2. このオブジェクトが呼び出さSections値自体がある(キー)の名前を持つオブジェクト(辞書)です:http://json.org/http://www.ietf.org/rfc/rfc4627.txt?number=4627ここで

    http://jsonlint.comはあなたのデータの構造ですチェック他のオブジェクト(辞書)

  3. Sections名前(キー)は、その値Section ARRAの各素子アレイ
  4. あるSectionと呼ばれていますIDtitletotalNews
  5. 各要素で:Section配列の各要素は、名前(キー)は、その値の配列、ならびに他の名前(キー)であるArticleと呼ばれているYはオブジェクト(辞書)
  6. ありますArticle配列はオブジェクトである

あなたのJSONデータが有効であった場合は、次のようにそれらを解析することができます:

// 1. 
NSDictionary *results = [jsonString JSONValue]; 
// 2. 
NSDictionary *sections = [results objectForKey:@"Sections"]; 
// 3. 
NSArray *sectionsArray = [sections objectForKey:@"Section"]; 
// 4. 
for (NSDictionary *section in sectionsArray) { 
    // 5. 
    NSLog(@"Section ID = %@", [section objectForKey:@"ID"]; 
    NSLog(@"Section Title = %@", [section objectForKey:@"Title"]; 
    NSArray *articles = [section objectForKey:@"Article"]; 
    // 6. 
    for (NSDictionary *article in articles) { 
     NSLog(@"Article ID = %@", [article objectForKey:@"ID"]; 
     NSLog(@"Article Title = %@", [article objectForKey:@"Title"]; 
     // … 
    } 
} 
+0

答えをありがとう!私はオンラインの閲覧ツールを使用し、データが本当に奇妙であることに気付いた。残念ながら、私はそれを支配していない、私はちょうど最後にID、名前、全体のニュースに対処するためにいくつかの行を書いた。ありがとうございました ! – Pepe

+0

おっと!無効なデータに寛容なObjective-C JSONパーサーがあるかどうかはわかりません。がんばろう! –

0

あなたのJSONフレームワークは、おそらくアウト解析していますあなたがNSArrayを期待しているNSDictionary。 NSArrayにNSDictionaryを割り当てることができますが、 "配列"上のメソッドを呼び出そうとするとランタイム例外が発生します。あなたが投稿したJSON(正しいJSONではない)で判断すると、これは私の解析コードのように見えます。 NSDictionariesとNSArraysの名前は、それらが表すJSON属性の名前に基づいています。

NSDictionary* results = [jsonString JSONValue]; 
NSDictionary* sections = [results valueForKey:@"Sections"]; 
NSArray* section = [sections valueForKey:@"Section"]; 
NSArray article = [[section objectAtIndex:0] valueForKey:@"Article"]; 

for (NSDictionary* anArticle in article) { 
    NSLog(@"%@", [anArticle valueForKey:@"Title"]); 
} 
+0

コメント: '-valueForKey:'はKey-Value Codingメソッドであり、辞書に格納されたオブジェクトを取得するための標準的な 'NSDictionary'メソッドである' -objectForKey: 'とは異なる意味と動作を持っています。 http:// stackoverflowを参照してください。com/questions/4489684/difference-valueforkey-objectforkey –

+0

回答メイトに感謝します! jsonは実際には不正な形ですが、私はそれを制御できません:( – Pepe

+0

@Bavarious、true true。悪い筋肉の記憶。 –

関連する問題