Iphone 如何从JSON获取数据?
我收到的回复是JSON格式的,过去从未解析过,所以请有人帮助我理解这一点。 下面是我得到的Json响应: 推特回复:Iphone 如何从JSON获取数据?,iphone,objective-c,json,Iphone,Objective C,Json,我收到的回复是JSON格式的,过去从未解析过,所以请有人帮助我理解这一点。 下面是我得到的Json响应: 推特回复: ( { contributors = "<null>"; coordinates = "<null>"; "created_at" = "Tue Nov 29 15:48:35 +0000 2011"; entities = { hashtags
(
{
contributors = "<null>";
coordinates = "<null>";
"created_at" = "Tue Nov 29 15:48:35 +0000 2011";
entities = {
hashtags = (
);
media = (
{
"display_url" = "pic.twitter.com/650E1WRY";
"expanded_url" = "http://twitter.com/ashu1702/status/141544088850796545/photo/1";
id = 141544088854990848;
"id_str" = 141544088854990848;
indices = (
22,
42
);
"media_url" = "http://p.twimg.com/AfbdmVBCEAAPJvT.jpg";
"media_url_https" = "https://p.twimg.com/AfbdmVBCEAAPJvT.jpg";
sizes = {
large = {
h = 279;
resize = fit;
w = 215;
};
medium = {
h = 279;
resize = fit;
w = 215;
};
small = {
h = 279;
resize = fit;
w = 215;
};
thumb = {
h = 150;
resize = crop;
w = 150;
};
};
type = photo;
url = "http://t.co/650E1WRY";
}
);
urls = (
);
"user_mentions" = (
);
};
favorited = 0;
geo = "<null>";
id = 141544088850796545;
"id_str" = 141544088850796545;
"in_reply_to_screen_name" = "<null>";
"in_reply_to_status_id" = "<null>";
"in_reply_to_status_id_str" = "<null>";
"in_reply_to_user_id" = "<null>";
"in_reply_to_user_id_str" = "<null>";
place = "<null>";
"possibly_sensitive" = 0;
"retweet_count" = 0;
retweeted = 0;
source = "<a href=\"http://www.apple.com\" rel=\"nofollow\">iOS</a>";
text = "I am in Syria @(null) http://t.co/650E1WRY";
truncated = 0;
user = {
"contributors_enabled" = 0;
"created_at" = "Sun May 01 15:20:52 +0000 2011";
"default_profile" = 1;
"default_profile_image" = 1;
description = "<null>";
"favourites_count" = 0;
"follow_request_sent" = "<null>";
"followers_count" = 0;
following = "<null>";
"friends_count" = 5;
"geo_enabled" = 0;
id = 291164338;
"id_str" = 291164338;
"is_translator" = 0;
lang = en;
"listed_count" = 0;
location = "<null>";
name = "Ashutosh Tiwari";
notifications = "<null>";
"profile_background_color" = C0DEED;
"profile_background_image_url" = "http://a0.twimg.com/images/themes/theme1/bg.png";
"profile_background_image_url_https" = "https://si0.twimg.com/images/themes/theme1/bg.png";
"profile_background_tile" = 0;
"profile_image_url" = "http://a2.twimg.com/sticky/default_profile_images/default_profile_3_normal.png";
"profile_image_url_https" = "https://si0.twimg.com/sticky/default_profile_images/default_profile_3_normal.png";
"profile_link_color" = 0084B4;
"profile_sidebar_border_color" = C0DEED;
"profile_sidebar_fill_color" = DDEEF6;
"profile_text_color" = 333333;
"profile_use_background_image" = 1;
protected = 0;
"screen_name" = ashu1702;
"show_all_inline_media" = 0;
"statuses_count" = 62;
"time_zone" = "<null>";
url = "<null>";
"utc_offset" = "<null>";
verified = 0;
};
}
)
在执行此操作时,我遇到以下错误:
2011-11-29 09:50:31.214 L'Occitane[1119:19d07] -[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x85a50d0
2011-11-29 09:50:31.215 L'Occitane[1119:19d07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x85a50d0'
请帮忙
谢谢,< p>当转换为可可基金会对象时,JSON分解成一组嵌套的<代码> NSrase>代码>和<代码> NSCORCHON/<代码> s,最终导致<代码> NSCONS/<代码> s,<代码> NSt/<代码> s和<代码> NSNull < /代码> s。理想情况下,您可以从web服务的文档向前工作,但也可以从根对象通过
NSLog
打印的描述向后工作
从您的日志中,我可以看到expanded\u url
是一个未命名对象的成员,该对象是媒体
数组中的第一个条目,该数组是实体
对象的成员。包含实体的未命名对象是数组的一部分,JSON反序列化程序将返回该数组。因此,您需要做一些类似的事情(如果以长格式写出来以供展示,并且没有任何验证):
其中的主要风险是,web服务可能会返回媒体的空数组,导致objectAtIndex:0
引发异常,或者它将返回数组以外的内容作为根对象,或者以其他方式调整行中的某个位置的类型。Objective-C关于消息传递的常规规则nil
应该可以让您避免大多数字典问题。要应用多少验证是一个判断判断
2011-11-29 09:50:31.214 L'Occitane[1119:19d07] -[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x85a50d0
2011-11-29 09:50:31.215 L'Occitane[1119:19d07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x85a50d0'
NSArray *result = [NSJSONSerialization ...
NSDictionary *firstObject = [result objectAtIndex:0];
NSDictionary *entities = [firstObject objectForKey:@"entities"];
NSArray *media = [entities objectForKey:@"media"];
NSDictionary *relevantObject = [media objectAtIndex:0];
NSString *expandedUrl = [relevantObject objectForKey:@"expanded_url"];