iOS-----JSON解析

JSON解析

JSON是一种广泛使用的数据交换格式,JSON同样具有跨平台、跨语言的优势,而且使用JSON作为数据交换格式时数据传输量更小。

JSON的基本知识

JSON的全称是JavaScript Object Notation,即JavaScript 对象符号,它是一种轻量级的数据交换格式.JSON数据格式既适合人进行读/写,也适合计算机本身解析和生成。


JSON主要有如下两种数据结构


由key-value对组成的数据结构,在不同的语言中有不同的实现。例如,在JavaScript中是一个对象,在Objective-C中是一种NSDictionary对象,在C语言中则是一个struct,在其他语言中可能有record、dictionary、hash table等实现


有序集合,在不同语言中可能有NSArray、vector、数组和序列等实现。


在JavaScript中主要有两种JSON语法,其中一种用于创建对象,另一种用于创建数组。

使用JSON语法创建对象

JSON创建对象时,总是{开始,以}结束,对象的每个属性名和属性值之间以英文冒号(:)隔开,多个属性定义之间以英文逗号(,)隔开.语法格式如下:

 1 object  =
 2
 3 {
 4
 5      propertyName1 : propertyValue1,
 6
 7       propertyName2 : propertyValue2,
 8
 9       …
10
11 }

使用JSON语法创建数组

使用JSON语法创建数组总是以英文方括号( [ )开始,然后依次放入数组元素,元素与元素之间以英文逗号( , )隔开,最后一个数组元素后面不需要英文逗号,但以英文反方括号 ( ] ).使用JSON创建数组的语法格式如下:

arr = [value1 , value2,…];


对于Objective-C的JSON工具而言,同样提供类似的两个功能


将Objective-C对象转换成JSON格式的字符串


将JSON格式的字符串恢复成Objective-C对象

使用NSJSONSerialization处理JSON数据

NSJSONSerialization类提供了如下类方法来支持JSON解析或生成

NSJSONSerialization只能将满足如下条件的对象转换为JSON数据

使用SBJson解析JSON数据

SBJson同样可以完成双向转换,它最主要的连个工具类就是SBJsonParser和SBJsonWriter,

其中SBJsonParser负责把NSData或NSString形式的JSON数据转换为Objective-C对象;

而SBJsonWriter则负责把Objective-C对象转换为NSData或NSString形式的JSON数据.

使用JSONKit解析JSON数据

  1 ViewController.m
  2
  3 #import “ViewController.h”
  4
  5 #import “SBJson.h”
  6
  7 #import “JSONKit.h”
  8
  9 @implementation ViewController
 10
 11 NSArray* books;
 12
 13 NSArray* parseResult;
 14
 15 NSString* tableTitle;
 16
 17 - (void)viewDidLoad
 18
 19 {
 20
 21    [super viewDidLoad];
 22
 23   // 定义一个Objective-C的NSArray数据,该示例会使用3种方式将该对象转换为JSON数据
 24
 25  books = [NSArray arrayWithObjects:
 26
 27 [NSDictionary  [email protected]”红楼梦”, @”title”,
 28
 29 @”曹雪芹 编著” , @”author”,
 30
 31 @”书写了清朝历史豪门的缩影”, @”remark” , nil ] ,
 32
 33 [NSDictionary  [email protected]”三国演义”, @”title”,
 34
 35 @”罗贯中 编著” , @”author”,
 36
 37 @”天下分久必合合久必分”, @”remark” , nil ] ,
 38
 39 [NSDictionary  [email protected]”西游记”, @”title”,
 40
 41 @”吴承恩 编著” , @”author”,
 42
 43 @”去西天取经”, @”remark” , nil ] ,
 44
 45 [NSDictionary  [email protected]”水浒传”, @”title”,
 46
 47 @”施耐庵 编著” , @”author”,
 48
 49 @”草根”, @”remark” , nil ]
 50
 51 ,nil];
 52
 53 self.tableView.dataSource = self;
 54
 55 }
 56
 57 - (IBAction)JSONSerializationParser:(id)sender
 58
 59 {
 60
 61    // 获取JSON文件所在的路径
 62
 63   NSString* jsonPath = [[NSBundle mainBundle] pathForResource:@”books”
 64
 65 [email protected]”json”];
 66
 67 // 读取jsonPath对应文件的数据
 68
 69 NSData* data = [NSData dataWithContentsOfFile:jsonPath];
 70
 71 // 解析JSON数据,返回Objective-C对象
 72
 73 parseResult = [NSJSONSerialization JSONObjectWithData:data
 74
 75 options:0 error:nil];
 76
 77 tableTitle = @”使用JSONSerializationParse解析”;
 78
 79 // 让tableView重新加载数据
 80
 81 [self.tableView reloadData];
 82
 83 }
 84
 85 - (IBAction)SBParser:(id)sender
 86
 87 {
 88
 89    // 获取JSON文件所在的路径
 90
 91   NSString* jsonPath = [[NSBundle mainBundle] pathForResource:@”books”
 92
 93 ofType:@”json”];
 94
 95 // 读取jsonPath对应文件的数据
 96
 97 NSData* data = [NSData dataWithContentsOfFile:jsonPath];
 98
 99 // 创建SBJsonParser对象
100
101 SBJsonParser* jsonParser = [[SBJsonParser alloc] init];
102
103 parserResult = [jsonParser objectWithData:data];
104
105 tableTitle = @”使用SBJson解析”;
106
107 // 让tableView重新加载数据
108
109 [self.tableView reloadData];
110
111 }
112
113 - (IBAction)JSONKitParse:(id)sender
114
115 {
116
117    // 获取JSON文件所在的路径
118
119   NSString* jsonPath = [[NSBundle mainBundle] pathForResource:@”books”
120
121 ofType:@”json”];
122
123 //  读取jsonPath对应文件的数据
124
125 NSData* data = [NSData dataWithContentsOfFile:jsonPath];
126
127 //  调用JSONKit为NSData扩展的objectFromJSONData方法解析JSON数据
128
129 parseResult = [data objectFromJSONData];
130
131 tableTitle = @”使用JSONKit解析”;
132
133  //  让tableView重新加载数据
134
135 [self.tableView reloadData];
136
137 }
138
139 - (IBAction)JSONSerializtionGenerate:(id)sender
140
141 {
142
143    // 调用NSJSONSerialization的类方法将Objective-C对象转换为JSON数据
144
145    NSData* data = [NSJSONSerialization dataWithJSONObject:books
146
147 options:0  error: nil];
148
149 //  将NSData格式的JSON数据转换为字符串
150
151 NSString* json = [[NSString alloc] initWithData:data
152
153 encoding:NSUTF8StringEncoding];
154
155 NSLog(@”NSJSONSerialization 转换得到的字符串为:%@”,  json);
156
157 }
158
159 - (IBAction)SBGenerate:(id)sender
160
161 {
162
163    // 创建SBJsonWriter对象
164
165   SBJsonWriter* jsonWriter = [[SBJsonWriter alloc] init];
166
167   // 调用SBJsonWriter对象的方法将Objective-C对象转换为JSON字符串
168
169   NSLog(@”SBJson 转换得到字符串为:  %@”, [jsonWriter stringWithObject: books]);
170
171 }
172
173 - (IBAction)JSONKitGenerate:(id)sender
174
175 {
176
177   // 调用JSONKit为NSArray对象扩展的JSONString方法将Objective-C对象转换为JSON字符串
178
179   NSLog(@”JSONKit 转换得到字符串为:  %@”, [books JSONString]);
180
181 }
182
183 - (NSString*)tableView:(UITableView *)tableView
184
185 titleForHeaderInSection:(NSInteger)section
186
187 {
188
189   return  tableTitle;
190
191 }
192
193 - (NSInteger)tableView:(UITableView*)tableView
194
195   numberOfRowsInSection: (NSInteger)section
196
197 {
198
199    // parseResult中包含多少个对象,该表格就显示多少行
200
201    retrun [parseResult  count];
202
203 }
204
205 - (UITableViewCell*)tableView:(UITableView*)tableView
206
207  cellForRowAtIndexPath:(NSIndexPath*)indexPath
208
209 {
210
211    // 根据动态单元格原型的ID来获取可重用单元格
212
213   UITableViewCell* cell = [tableView  dequeueReusableCellWithIdentifier:@”bookCell”
214
215 forIndexPath: indexPath];
216
217 // 获取当前行号在parserResult中对应的数据
218
219 NSDictionary* book = [parseResult  objectAtIndex: indexPath.row];
220
221 // 获取单元格中的3个控件,并为3个控件设置显示文本
222
223 UILabel* titleLabel = (UILabel*)[cell  viewWithTag:1];
224
225 titleLabel.text = [book objectForKey:@”title”];
226
227 UILabel* authorLabel = (UILabel* )[cell viewWithTag:2];
228
229 authorLabel.text = [book objectForKey:@”author”];
230
231 UILabel* remarkLabel = (UILabel* )[cell viewWithTag:2];
232
233 authorLabel.text = [book objectForKey:@”remark”];
234
235 }
236
237 @end

时间: 2024-10-29 19:06:41

iOS-----JSON解析的相关文章

IOS json解析 和生成json串

1.生成json字符串 NSData * jsonData = [NSJSONSerialization dataWithJSONObject:detailDic options:0 error:nil]; NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 2.json解析 NSDictionary * selectSimpleTest = [NSJSONSe

iOS - Json解析精度丢失处理(NSString, Double, Float)

开发中处理处理价格金额问题, 后台经常返回float类型, 打印或转成NSString都会有精度丢失问题, 因此使用系统自带的NSDecimalNumber做处理, 能解决这问题:经过测试其实系统NSDecimalNumber是对有问题值做了四舍五入处理 ?    还有经过测试, 重要的事说三遍:?处理精度有关的数据请用double?处理精度有关的数据请用double?处理精度有关的数据请用double     float testDouble = [jsonDict[@"Body"]

iOS Json解析框架之MJExtension使用详解

1. Plist → 模型数组 控制器中引用#import "MJExtension.h" 模型数组 = [模型类名 objectArrayWithFilename:@"文件名.plist"]; 2. 对NSLog的优化,解决 调试时,打印模型,只打印出内存地址的问题 使用方法:在模型类的.m文件中,引用#import "MJExtension.h" 在@implementation 和 @end之间,写上MJLogAllIvrs 3. 对NSC

iOS JSON 数据解析

JSON 是比较常用的数据格式,相比 XML 层次更清晰,这里介绍两种解析 JSON 的方式:NSJSONSerialization 和 JSONKit NSJSONSerialization 是 iOS 5 以后推出的,比较好用的 JSON 解析包. JSON 数据格式由对应的 '[',']' 和 '{','}',前者表示数组,后者表示字典. NSJSONSerialization 解析过程: 1.获取文件路径 2.获取文件内容 3.解析 简单小例子: 1 - (IBAction)parser

iOS之网络数据下载和JSON解析

iOS之网络数据下载和JSON解析 简介 在本文中笔者主要给大家介绍IOS如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示. 涉及到的知识点: 1.NSURLConnection 异步下载和封装 2.JSON格式和JSON格式解析 3.数据显示和使用SDWebImage异步显示图片 内容 1.网络下载基础知识介绍 什么是网络应用? 需要通过联网进行操作的应用 网络应用的程序结构? c/s结构:即客户端/服务端 常见的

IOS中Json解析的四种方法

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSerialization),但是为了兼容以前的ios版本,可以使用第三方库来解析Json. 本文将介绍TouchJso

IOS 原生解析JSON 问题

服务器----WebService 返回的是JSON数据 IOS解析报错: Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 56." UserInfo={NSDebugDescription=Unable to convert data to string around character 56.} Code = 3840 错误 通过我将JSON写成

iOS 中json解析数据出现中文乱码的问题

一般服务器的编码格式都是UTF8,这样通过json解析下来的的数据,一般中文是不会出现乱码,但是如果服务器的编码格式不是UTF8,通过json解析的数据中的中文容易出现luan乱码,怎么解决这个问题呢? 一般都是通过转码来解决,但是直接转码,是不能达到效果的,例如 [jsonStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 这样直接转码是达不到效果的. 解析数据的时候,可以先把数据存放在NSdata对象中,

ios json数据解析

刚刚下午那会 弄了个 解析 xml  demo的小例子,本想着json也挺复杂 弄还是 不弄,但是简单的看了下 发现挺简单,这个时候就犹豫了,要不写到博客上来 ? 考虑了很久,还是写上来吧,毕竟json用得太多了,而且算是自己的积累吧,毕竟刚开始学习IOS开发方面的知识,就当是巩固了撒! 还是 先看个效果图吧,如下! 接下来 看下工程目录吧,其实并没有必要,直接建立一个工程就行 ,算了,还是贴上来吧,如下: 工程目录中有个 Notes.json 文件,该文件就是 要解析的json数据了 ,也截下

ios的网络数据下载和json解析

ios的网络数据下载和json解析 简介 在本文中,笔者将要给大家介绍如何使用nsurlconnection 从网上下载数据,以及解析json数据格式,以及如何显示数据和图片的异步下载显示. 涉及的知识点: NSYRLConnection异步下载和封装 JSON格式和JSON格式解析 数据显示和使用SDwebimage异步下载图片 内容 网络下载基础知识介绍 NSURLConnection使用 JSON格式说明和格式化工具 一个完成页面的实现(包含model和SDWebimage) 什么是网络应