ios html json解析,IOS中Json解析的四种方法

一.使用JSONKit的解析方法:(需导入包:#import

"JSONKit/JSONKit.h")

​//如果json是“单层”的,即value都是字符串、数字,可以使objectFromJSONString

​NSString *json1 = @"{\"a\":123, \"b\":\"abc\"}";

​NSDictionary *data1 = [json1 objectFromJSONString];

[json1 release];

//如果json有嵌套,即value里有array、object,如果再使用objectFromJSONString,程序可能会报错(测试结果表明:使用由网络或得到的php/json_encode生成的json时会报错,但使用NSString定义的json字符串时,解析成功),最好使用objectFromJSONStringWithParseOptions:

NSString *json2 = @"{\"a\":123, \"b\":\"abc\", \"c\":[456, \"hello\"], \"d\":{\"name\":\"张三\", \"age\":\"32\"}}";

​NSDictionary *data2 = [json2

objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];

​[json2 release];

二.使用SBJSON​的解析方法:(需导入包:#import

"SBJson/SBJson.h")

bjson有一个有用的sbjsonparser类,可以在一行内搞定整个json串的解析:

SBJsonParser *jsonParser =[[SBJsonParser alloc] init];

NSError*error =nil;

NSArray*jsonObjects = [jsonParser objectWithString:jsonString error:&error];

[jsonParser release];

​​jsonParser= nil;

​sbjson将json作为objective-c的字典来处理。对于不同的webservice,你可能得到一个顶级的json对象或者一个数组。因此,objectWithString:error:有一个id类型返回值。你可以使用objective-c的动态特性来决定解析返回时采用何种数据来接收,如下:

id jsonObject = [jsonParser objectWithString:jsonString error:&error];

if ([jsonObject isKindOfClass:[NSDictionary class]]) //treat as a dictionary, or reassign to a dictionary ivarelse.

if ([jsonObject isKindOfClass:[NSArray class]]) //treat as an array or reassign to an array ivar.

注:

转换代码: 如果直接使用NSMutableDictionary*root  来获得字符串,将会对json字串产生以下变化​​

1. 中文问题

2.加入了()符号

3.所有的: 变成了 =

要避免这个问题的产生,需要用

SBJsonWriter*jsonWriter = [[SBJsonWriteralloc]init];

NSString *jsonString = [jsonWriter stringWithObject:root];

[jsonWriter release];

这段代码来把 NSMutableDictionary 转成 NSString

缺点:性能差,解析速度慢,不建议使用。​

三.使用TouchJSon解析方法:(需导入包:#import "TouchJson/JSON/CJSONDeserializer.h")​

四.使用IOS5自带解析类NSJSONSerialization方法解析:(无需导入包,IOS5支持,低版本IOS不支持)​

NSError *error;

​//加载一个NSURL对象

​NSURLRequest *request = [NSURLRequest

requestWithURL:[NSURL URLWithString:@"http://m.weather.com.cn/data/101180601.html"]];

​//将请求的url数据放到NSData对象中

​NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

//IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中​

​NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];

NSDictionary *weatherInfo = [weatherDic objectForKey:@"weatherinfo"];

​txtView.text = [NSString stringWithFormat:@"今天是 %@  %@  %@  的天气状况是:%@  %@ ",

[weatherInfo objectForKey:@"date_y"],

[weatherInfo objectForKey:@"week"],

[weatherInfo objectForKey:@"city"],

[weatherInfo objectForKey:@"weather1"],

[weatherInfo objectForKey:@"temp1"]];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值