Obj-Cを使用したJSONオブジェクトの読み取りに関する問題

iphone json objective-c
Obj-Cを使用したJSONオブジェクトの読み取りに関する問題

私はjson-frameworkとobj-Cを使用して次のjsonオブジェクトを読み取ろうとしています

{
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;
        }
    );
};
}

私の目的は、後で簡単にアクセスできるように、記事のリスト(辞書のリスト)を用意することです。 私はこれにしばらく立ち往生しており、私のコードは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  0


ベストアンサー

まず、これらは有効なJSONデータではありません。 名前(名前と値のペア)は文字列であり、引用符で囲む必要があります。 文字列値は常に引用符で囲む必要があります。 ブール値は、 true`または false`(小文字)でなければなりません。 http://json.org/およびhttp://www.ietf.org/rfc/rfc4627.txt?number=4627およびhttp://jsonlint.comを確認してください

データの構造は次のとおりです。

  1. 最上位の値はオブジェクト(辞書)です

  2. このオブジェクトは、値がそれ自体である `Sections`と呼ばれる名前(キー)を持っています
    別のオブジェクト(辞書)

  3. Sections`には Section`という名前(キー)があり、その値は配列です

  4. `Section`配列の各要素はオブジェクト(辞書)です

  5. Section`配列の各要素には Article`という名前(キー)があります
    値が配列である他の名前(キー): ID、` title`、 totalNews

  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"];
       // …
    }
}

1


あなたのJSONフレームワークは、おそらくNSArrayを期待しているNSDictionaryを解析しています。 NSArrayにNSDictionaryを割り当てることができますが、「配列」でメソッドを呼び出そうとするとランタイム例外が発生します。 投稿したJSON(正しいJSONではありません)から判断すると、これが解析コードの外観です。 NSDictionariesとNSArrayの名前は、それらが表す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


タイトルとURLをコピーしました