昨夜、TouchJSON を使っていくつかのテストを行いましたが、単純なケースでは一般的にうまく機能しました。次のコードを使用して、ファイルから JSON コンテンツを読み取り、逆シリアル化しています。
NSString *jsonString = [[NSString alloc] initWithContentsOfFile:@"data.json"];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding];
NSError *error = nil;
NSDictionary *items = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];
NSLog(@"total items: %d", [items count]);
NSLog(@"error: %@", [error localizedDescription]);
ファイルに非常に単純な JSON オブジェクト (つまり、辞書) がある場合、これは問題なく機能します。
{"id": "54354", "name": "boohoo"}
リスト内のインデックスに基づいてアイテムを取得したかったので、この方法で値の配列にアクセスできました。
NSArray *items_list = [items allValues];
NSString *name = [items_list objectAtIndex:1];
(辞書 API で名前を取得できたことは理解しています)
ここで、辞書の配列を表す半複雑な JSON 文字列を逆シリアル化したいと思います。このような JSON 文字列の例を以下に示します。
[{"id": "123456", "name": "touchjson"}, {"id": "3456", "name": "bleh"}]
data.json ファイルのこの新しいコンテンツに対して上記と同じコードを実行しようとすると、結果が返されません。私の NSLog() 呼び出しは「合計アイテム: 0」と言い、NSError オブジェクトにエラーは返されません。
何が起こっているのかについての手がかりはありますか?TouchJSON に関するドキュメントがあまりなく、使用例も少ないため、何をすべきか完全に迷っています。