0

asp.net を使用して開発された Web サービス/API に対して iPhone アプリケーションを実行する必要があります。

何らかの理由で、API 呼び出しから返された応答で、以下に示すように JSON の先頭に余分な文字と「d」が追加されます。

{"d":"{\"count\":\"0\",\"status\":\"500\",\"recipes\":[]}"}

私の基本的な読書から、これはサービスの問題をシリアライズしているようです。

  1. 私が間違っている ??
  2. iPhoneクライアントで正しいJSONにデシリアライズできる方法はありますか?

ヘルプまたはガイダンスをいただければ幸いです。

4

1 に答える 1

0

全体の考えは、jsonでもある文字列を持つオブジェクト「D」を含むjsonであるため、json内のjsonです。

'outer json' : { "d" : "" }
+ an inner json : {"count":"0","status":"500","re​​cipes":[]}

\ なしで内側の json を挿入しただけでは、無効な json が取得される可能性があります..実際には (この場合) そうはしませんが、lib は安全側にあるようにしようとしているため、内側の json をエスケープし、次のようにエンコードします。文字列!

以下に示すように、文字列を取得して解析すると正常に機能し、すべてが有効です

id innerJSON = @"{\\\"count\\\":\\\"0\\\",\\\"status\\\":\\\"500\\\",\\\"recipes\\\":[]}";
id response = [NSString stringWithFormat:@"{\"d\":\"%@\"}", innerJSON];
id data = [response dataUsingEncoding:NSUTF8StringEncoding];
id outerJson = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"%@", outerJson[@"d"]);

data = [outerJson[@"d"] dataUsingEncoding:NSUTF8StringEncoding];
id innerJson = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"%@ %@", innerJson[@"count"],innerJson[@"status"]);
于 2013-01-01T13:32:29.567 に答える