0

次のJSONを解析しようとしています(前回チェックしたときに検証されたと思います):

{
    "top_level" =     (
                {
            "download" = "http:/target.com/some.zip";
            "other_information" = "other info";
            "notes" =             (
                                {
                    obj1 = "some text";
                    obj2 = "more notes";
                    obj3 = "some more text still";
                }
            );
            title = "name_of_object1";
        },
                {
            "download" = "http:/target.com/some.zip";
            "other_information" = "other info";
            "notes" =             (
                                {
                    obj1 = "some text";
                    obj2 = "more notes";
                    obj3 = "some more text still";
                }
            );
            title = "name_of_object2";
        },
                {
            "download" = "http:/target.com/some.zip";
            "other_information" = "other info";
            "notes" =             (
                                {
                    obj1 = "some text";
                    obj2 = "more notes";
                    obj3 = "some more text still";
                }
            );
            title = "name_of_object3";
        }
    );
}

私の試みは以下を使用しています:

NSDictionary *myParsedJson = [myRawJson JSONValue];

for(id key in myParsedJson) {
    NSString *value = [myParsedJson objectForKey:key];
    NSLog(value);
}

エラー:

-[__NSArrayM length]: unrecognized selector sent to instance 0x6bb7b40

質問: JSON の値によって、myParsedJson オブジェクトが NSDictionary ではなく NSArray になるように思えます。

name_of_object というオブジェクトを反復処理し、ネストされた各辞書にアクセスするにはどうすればよいでしょうか? 私はそれを正しい方法で行っていますか?

4

2 に答える 2

2

NSLog の最初の引数は文字列でなければなりません。これを試して:

NSLog(@"%@", value);
于 2012-10-03T01:37:50.450 に答える
1

value入力したからといって、文字列ではありません。投稿した構造に基づいて、最上位オブジェクトとして配列が作成されます。

NSDictionary *myParsedJson = [myRawJson JSONValue];
for(id key in myParsedJson) {
    id value = [myParsedJson objectForKey:key];
    NSLog(@"%@", value);
}

%@NSLogの構文により、-descriptionメソッドはvalueで呼び出されます。このメソッドはNSStringを返します。それはあなたができることを意味しますがNSLog([value description]);、これは一般的に良い考えではありません。(誰かがあなたのアプリをクラッシュさせる可能性のある悪意のある入力を作成する可能性があります。)

于 2012-10-03T09:21:01.323 に答える