-1

我在使用 NSJSONSerialization 解析 YELP1 Json 并使用 NSDictionary 访问数据方面做得很好。但是,我发现响应中存在不一致之处:

一些键被 包围",主要是包含一个_

部分回复:

(
        {
        address1 = "xxx";
        address2 = "";
        address3 = "";
        "avg_rating" = 5;
        city = "Chicago";
        country = USA;
        "country_code" = US;

从...获取
[[NSString alloc] initWithData:self.recievedData encoding:NSUTF8StringEncoding];

这与括号中没有键的文档不一致。 http://www.yelp.com/developers/documentation/search_api

显然,括号表示键值中的“_”出于某种原因,而不是值的类型。括号包围每个包含_, 的键的值可以是字符串int或其他。

访问诸如 avg_rating 之类的字段

[dict objectForKey:@"avg_rating"];

失败了NSInvalidArgumentException

虽然[dict objectForKey:@"country"];会工作。

因此,我认为返回的值不是 NSDictionary / NSLog 问题,而是提交给 dict 对象的键有问题。或者,也许在 JSON 解析期间?但是,请用一段工作代码证明我错了...... :)

有任何想法吗?谢谢,埃尔

编辑:已编辑,因为问题现在可能已经足够清楚了。
Edit2:实际上,这里返回的是一个 NSNumber。对这些 "" 感到困惑。

4

1 回答 1

1

部分回复:

不,这不是回应的一部分。那是结果的描述,NSDictionary不是 JSON。

NSLog([dict objectForKey:@"avg_rating"]);失败NSInvalidArgumentException,而NSLog([dict objectForKey:@"country"]);会工作。

当然,因为NSLog()不是没有魔法。它需要一个(格式)字符串作为它的第一个参数,所以如果你提供给它的对象是 an NSString,它会正常工作(country我假设是一个字符串),但如果你不这样做(avg_rating可能是 an NSNumber),那么它就赢了't (它将尝试将消息发送NSStringNSNumber实例,这显然失败了)。

因此,请了解 JSON 与从该 JSON 生成的描述之间的区别。NSDictionary

于 2013-02-10T07:34:44.203 回答