JSON数据解析
来源:互联网 发布:nginx ip转发 编辑:程序博客网 时间:2024/06/06 10:06
今天教朋友解析Json数据有一些要注意的地方在这里和大家交流一下
先展示一下数据
{ "version": "0.1", "time": "2014-11-20 00:00:00", "main_app_id": "-1", "loop_delay": 5, "more_apps": [ { "bundle_id": "com.cocoplay.cocoiceprincess", "url_scheme": "cocoiceprincess://", "id": 001, "icon": "http://cocoplay.com/moreapps/icons/icon-iceprincess.png", "promotion_url": "", "promotion_url_deep_amazon": "", "bundle_id_googleplay": "", "promotion_url_googleplay": "", "name": { "en": "", "zh-Hans": "" }, "description": { "en": "", "zh-Hans": "" }, "content_image": { "en": "", "zh-Hans": "" } }, { "bundle_id": "com.cocoplay.cocomia", "url_scheme": "cocomia://", "id": 002, "icon": "http://cocoplay.com/moreapps/icons/icon-mia.png", "promotion_url": "", "promotion_url_deep_amazon": "", "bundle_id_googleplay": "", "promotion_url_googleplay": "", "name": { "en": "", "zh-Hans": "" }, "description": { "en": "", "zh-Hans": "" }, "content_image": { "en": "", "zh-Hans": "" } }, { "bundle_id": "com.cocoplay.cocopony", "url_scheme": "cocopony://", "id": 003, "icon": "http://cocoplay.com/moreapps/icons/icon-pony.png", "promotion_url": "", "promotion_url_deep_amazon": "", "bundle_id_googleplay": "", "promotion_url_googleplay": "", "name": { "en": "", "zh-Hans": "" }, "description": { "en": "", "zh-Hans": "" }, "content_image": { "en": "", "zh-Hans": "" } }, { "bundle_id": "com.cocoplay.cocostar", "url_scheme": "cocostar://", "id": 004, "icon": "http://cocoplay.com/moreapps/icons/icon-star.png", "promotion_url": "", "promotion_url_deep_amazon": "", "bundle_id_googleplay": "", "promotion_url_googleplay": "", "name": { "en": "", "zh-Hans": "" }, "description": { "en": "", "zh-Hans": "" }, "content_image": { "en": "", "zh-Hans": "" } } ]}这是一个标准的数据格式,但是我们在解析之前需要注意一下json数据中是否有\n\r\t等制表符,否则NSData不会校验通过会报Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)"错误
另外里面含有id特殊字符我解析的时候是将其去掉了的,否则也会报如上错误
下面展示我的解析代码
这里建立JsonFile对象:
//// JsonFile.h// JsonDemo//// Created by SPF on 16/1/26.// Copyright (c) 2016年 SPF. All rights reserved.//#import <Foundation/Foundation.h>@interface JsonFile : NSObject@property (nonatomic,copy)NSString*bundle_id;@property (nonatomic,copy)NSString*url_scheme;@property (nonatomic,copy)NSString*icon;- (instancetype)initWithbundle_id:(NSString *)bundle_id url_scheme:(NSString *)url_scheme icon:(NSString *)icon;@end
//// JsonFile.m// JsonDemo//// Created by SPF on 16/1/26.// Copyright (c) 2016年 SPF. All rights reserved.//#import "JsonFile.h"@implementation JsonFile-(instancetype)initWithbundle_id:(NSString *)bundle_id url_scheme:(NSString *)url_scheme icon:(NSString *)icon{ if (self = [super init]) { _bundle_id =bundle_id; _url_scheme =url_scheme; _icon =icon; } return self;}-(NSString *)description{ return [NSString stringWithFormat:@"\nbundle_id:%@\nurl_scheme:%@\nicon:%@",_bundle_id,_url_scheme,_icon];}@end
//// RootViewController.m// JsonDemo//// Created by SPF on 16/1/26.// Copyright (c) 2016年 SPF. All rights reserved.//#import "RootViewController.h"#import "JsonFile.h"#define PATH @"/Users/xiepei/Desktop/JsonDemo/bride_moreapps.json"@interface RootViewController ()@property (nonatomic,strong)NSMutableArray *mArry;@property (nonatomic,strong)NSMutableArray *iconUrl;@end@implementation RootViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self analysisJson]; [self creatImageView];}-(void)analysisJson{ //1、定义一个可变数组,用于存储解析到的信息 _mArry=[[NSMutableArray alloc]init]; _iconUrl=[[NSMutableArray alloc]init]; //2、读取文件内容 NSData *data =[NSData dataWithContentsOfFile:PATH]; //3、将其转换为JSON对象 NSError *error; id root=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error]; NSLog( @"%@",error); //4、取出需要解析的内容其它的可忽略 id more_apps=[root objectForKey:@"more_apps"]; //5、我们已经知道ore_apps是一个数组,所以遍历解析 for (id obj in more_apps) { NSString *bundle_id=[obj objectForKey:@"bundle_id"]; NSString *url_scheme=[obj objectForKey:@"url_scheme"]; NSString *icon=[obj objectForKey:@"icon"]; //创建JsonFile对象,保存解析的信息 JsonFile *Json=[[JsonFile alloc]initWithbundle_id:bundle_id url_scheme:url_scheme icon:icon]; //将解析到的JsonFile对象保存到数组中 [_mArry addObject:Json]; //这个数组专门存储url [_iconUrl addObject:icon]; } //在这里打印解析出来的数据 for (id obj in _mArry) { NSLog(@"%@", obj); }}-(void)creatImageView{ CGFloat width=self.view.frame.size.width/_mArry.count; for (int i=0; i<_mArry.count; i++) { UIImageView *image=[[UIImageView alloc]initWithFrame:CGRectMake(i*width, 64, width, width)]; NSURL *url=[NSURL URLWithString:_iconUrl[i]]; NSData *data=[NSData dataWithContentsOfURL:url]; image.image=[UIImage imageWithData:data]; [self.view addSubview:image]; }}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller.}*/@end
最后效果
0 0
- Newtonsoft.Json解析json数据
- 使用Json解析Json数据
- JavaScript 解析 JSON 数据
- JavaScript 解析 JSON 数据
- JAVA解析json数据
- jquery解析json数据
- jquery解析json数据
- android---Json数据解析
- Android Json 数据解析
- jquery解析json数据
- Gson解析Json数据
- json 的数据解析
- Android解析json数据
- Java解析JSON数据
- Jquery解析json数据
- eval 解析 json 数据
- 解析JSON数据
- JSON 数据解析
- iPhone开发 – 小技巧二则 (UIColor 16进制颜色 | UIview设置frame)
- C++32 调用 C# 64编写的dll
- {最代码}如何在eclipse jee中检出项目并转换为Maven project,最后转换为Dynamic web project
- 【IOS开发】高德地图定位坐标偏差
- 深入理解Java内存模型
- JSON数据解析
- U-Boot在启动之初为何要关闭Cache和MMU?
- 关于递归的思路的例子
- IDEA中的常用快捷
- Shell脚本实现自动修改IP地址
- SVN实际应用中的注意事项
- cocos2d-js cc.DrawNode用法示例
- 深入理解Java内部类
- Tcp设置发送和接收超时