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。

所以你有一个'外部json':{“d”:“”}
+一个内部json:{“count”:“0”,“status”:“500”,“recipes”:[]}

如果我们只是在没有 \ 的情况下插入内部 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 回答