1

POST操作に対して次の応答を提供するWCFサービスを作成しました。

"[{\"Id\":1,\"Name\":\"Michael\"},{\"Id\":2,\"Name\":\"John\"}]"

JSONObjectWithDataを呼び出してもエラーは返されませんが、結果を列挙できません。何が間違っているのでしょうか。

NSError *jsonParsingError = nil;
NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];

NSLog(@"jsonList: %@", jsonArray);

if(!jsonArray)
{
    NSLog(@"Error parsing JSON:%@", jsonParsingError);
}
else
{
    // Exception thrown here.        
    for(NSDictionary *item in jsonArray)
    {
        NSLog(@"%@", item);
    }
}
4

3 に答える 3

3

考えられる原因は、間違ったファンデーションオブジェクトを使用していることです。NSMutableArrayをNSDictonaryに変更してみてください。

から:

NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];

に:

NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];
于 2011-12-27T23:33:39.820 に答える
3

Jeremyが指摘したように、JSONデータの引用符をエスケープするべきではありません。しかしまた、あなたは戻り文字列を引用しました。これにより、オブジェクトではなくJSON文字列になります。したがって、デコードすると、可変配列ではなく文字列が得られます。そのため、高速反復を実行しようとするとエラーが発生します...できません。文字列を高速で反復します。

実際のJSONは次のようになります[{"Id":1,"Name":"Michael"},{"Id":2,"Name":"John"}]。引用符もエスケープもありません。JSONオブジェクトの前後の引用符を削除すると、アプリはクラッシュしなくなりますが、不正な形式のデータ(エスケープ)のJSON逆シリアル化エラーが発生します。

于 2011-12-28T00:16:54.153 に答える
0

NSJSONSerializationを使用した解析は簡単ですが、辞書を処理する代わりに、JSON値をクラスオブジェクトに直接解析できる小さなフレームワークも作成しました。見てください、それは役に立つかもしれません: https ://github.com/mobiletoly/icjson

于 2013-10-01T22:52:51.087 に答える