我需要针对使用asp.net开发的Web服务/ API运行我的iPhone应用程序。
由于某种原因,我从API调用返回的响应在JSON的开头添加了额外的字符和“d”,如下所示。
{"d":"{\"count\":\"0\",\"status\":\"500\",\"recipes\":[]}"}
从我的基本阅读来看,这似乎是服务上的序列化问题。
非常感谢帮助或指导。
答案 0 :(得分:0)
整个思考是一个json,它包含一个对象“D”,其字符串也是json 所以这是json里面的一个json。
所以你有一个'外面的json':{“d”:“”}
+内在的json:{“count”:“0”,“status”:“500”,“食谱”:[]}
如果我们刚刚插入没有\的内部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"]);