Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)

本文主要是介绍Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

json和xml的普及个人觉得是为了简化阅读难度,以及减轻网络负荷,json和xml 数据格式在格式化以后都是一种树状结构,可以树藤摸瓜的得到你想要的任何果子。

而不格式化的时候json和xml 又是一个普普通通的字符串,在网络通信的时候也只需要请求一次,而不用每次为得到木一个值而重复的请求服务器或者目标主机,

json和xml 都采用 键 - 值 的形式来存放数据。

xml 使用: <键> 值 </键>

json 使用:  "键" : "值"

苹果公司提供了一个官方的json解析库 NSJSONSerialization   

NSJSONSerialization  里面包含了两个方法来通过不同数据形式来解析json数据。

1、+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error; //使用缓冲区数据来解析

2、+ (id)JSONObjectWithStream:(NSInputStream *)stream options:(NSJSONReadingOptions)opt error:(NSError **)error; // 使用文件流的形式来解析json

 

解析json的步骤大概是,先把json字符串读取到缓冲区,然后使用NSJSONSerialization    里面的方法进行解析,根据不同json 格式可能返回的数据类型不一样,所以最好用 id 类型接。

eg:  id dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];

在得到解析后的数据时,然后就一步一步 ,一个一个 键 - 值 的去寻找你想要的咚咚。

 

Eg 1 : 从本地文件中读取json数据,然后读取到缓冲区。


- (void)jsonParse{//初始化文件路径。NSString* path  = [[NSBundle mainBundle] pathForResource:@"nanjing" ofType:@"txt"];//将文件内容读取到字符串中,注意编码NSUTF8StringEncoding 防止乱码,NSString* jsonString = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];//将字符串写到缓冲区。NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];//解析json数据,使用系统方法 JSONObjectWithData:  options: error:NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];//接下来一步一步解析。知道得到你想要的东西。NSArray* arrayResult =[dic objectForKey:@"results"]; NSDictionary* resultDic = [arrayResult objectAtIndex:0];NSDictionary* geometryDic = [resultDic objectForKey:@"geometry"];NSLog(@"geometryDic: %@,  resultDic:%@",geometryDic,resultDic);NSDictionary* locationDic = [geometryDic objectForKey:@"location"];NSNumber* lat = [locationDic objectForKey:@"lat"];NSNumber* lng = [locationDic objectForKey:@"lng"];NSLog(@"lat = %@, lng = %@",lat,lng);[jsonString release];}

 

 

Eg 2 :使用网络路径来解析json,

- (void)jsonParse{//初始化网络路径。NSString* path  = @"http://maps.googleapis.com/maps/api/geocode/json?address=nanjing&sensor=true";//初始化 url NSURL* url = [NSURL URLWithString:path];//将文件内容读取到字符串中,注意编码NSUTF8StringEncoding 防止乱码,NSString* jsonString = [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];//将字符串写到缓冲区。NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];//解析json数据,使用系统方法 JSONObjectWithData:  options: error:NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];//一下为自定义解析, 自己想怎么干就怎么干NSArray* arrayResult =[dic objectForKey:@"results"]; NSDictionary* resultDic = [arrayResult objectAtIndex:0];NSDictionary* geometryDic = [resultDic objectForKey:@"geometry"];NSLog(@"geometryDic: %@,  resultDic:%@",geometryDic,resultDic);NSDictionary* locationDic = [geometryDic objectForKey:@"location"];NSNumber* lat = [locationDic objectForKey:@"lat"];NSNumber* lng = [locationDic objectForKey:@"lng"];NSLog(@"lat = %@, lng = %@",lat,lng);[jsonString release];}

 


Eg 3 :使用网络路径来解析json 。 使用NSURLRequest 和NSURLConnection 请求网络数据。

- (void)jsonParse{//初始化网络路径。NSString* path  = @"http://maps.googleapis.com/maps/api/geocode/json?address=nanjing&sensor=true";//初始化 url NSURL* url = [NSURL URLWithString:path];NSURLRequest* request = [NSURLRequest requestWithURL:url];//将请求到的字符串写到缓冲区。NSData* jsonData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];//解析json数据,使用系统方法 JSONObjectWithData:  options: error:NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];//一下为自定义解析, 自己想怎么干就怎么干NSArray* arrayResult =[dic objectForKey:@"results"]; NSDictionary* resultDic = [arrayResult objectAtIndex:0];NSDictionary* geometryDic = [resultDic objectForKey:@"geometry"];NSLog(@"geometryDic: %@,  resultDic:%@",geometryDic,resultDic);NSDictionary* locationDic = [geometryDic objectForKey:@"location"];NSNumber* lat = [locationDic objectForKey:@"lat"];NSNumber* lng = [locationDic objectForKey:@"lng"];NSLog(@"lat = %@, lng = %@",lat,lng);}

demo下载 :http://download.csdn.net/download/wsq724439564/6207829

这篇关于Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135772

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.