<一>JSON的基本知识

  1. 什么是JSON:JSON的全称是JavaScript Object Notation(JavaScript对象符号),是目前使用最广泛的数据交换格式,具有跨平台.跨语言的优势,而且对照XML,JSON作为数据传输格式时,数据传输量更小,JSON数据格式既适合人来进行读写,又适合计算机本身解析和合成
  2. JSON的数据结构:
    1.   由key-value对组成的数据结构,这种数据结构在不同的语言中有不同的实现,例如:在JavaScript中是一个对象,在Objective-C中是一种NSDictionary对象,在C语言中则是一个struct,在其他语言中可能对应其他的结构
    2.   有序集合,这种数据结构在不同的语言中可能有NSArray,vector,数组和序列等实现
  3. JSON网址:http://www.json.org

<二>JSON-OC数据类型对照表

JSON-OC数据对照表
JSON OC
大括号{} NSDictionary
中括号[] NSArray
双引号"" NSString
数字 1, 2.3 NSNumber

<三>Objective-C中的JSON解析与生成:(JSON->Objective-C  Objectivew->JSON)

在iOS5之后,iOS SDK提供了NSJAONSerialization类来解析和生成JSON,但在有些时候为了兼容以前的版本或者寻求更强大的功能,我们会选择第三方库来处理JSON,常见的第三方库有SBJson, JSONKit,  并有模型处理类库例如:MJExtension,JSONModel,YYModel来帮助JSON解析

<四>使用NSJSONSerialization来处理JSON数据

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

  1. + JSONObjectWithData: options: error:           该方法负责将制定的NSData中包含的JSON数据转换为Obj-C对象

  2. + JSONObjectWithStream: options: error:           该方法负责将制定的输入流中包含的JSON数据转换为Obj-C对象

  3. + dataWithJSONObject: options: error:               该方法负责将制定的JSON对象转换为NSData对象

  4. + writeJSONObject: toStream: options: error:     该方法负责将制定的JSON对象转换为JSON字符串输出到制定的输出流中

 options:

NSJSONReadingMutableContainers = (1UL << 0), 所有节点可变

NSJSONReadingMutableLeaves = (1UL << 1),叶子节点可变

NSJSONReadingAllowFragments = (1UL << 2) 根节点可变

  1. + isValidJSONObject:                                         该方法用于判断制定的对象是否可以转换为JSON数据

由于NSJSONSerailization并不能把任意的对象转换为JSON数据,所以提供了类方法 isValidJSONObject 用来判断制定对象是否可以转换为JSON数据

NSJSONSerailization只能讲满足如下条件的对象转换为JSON对象

  • 顶层对象只能是NSArray或者NSDictionary
  • 集合中包含的对象只能是NSString,NSNumber,NSArray,NSDictionary或NSNull对象
  • 所有NSDictionary的key只能是NSString
  • NSNumber包装的数值不能是NaN或Infinity

<五>使用JSONKit来处理JSON数据

JSONKit的github地址:

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

  1. 用于解析NSString类型的JSON数据的分类

@interface NSString (JSONKitDeserializing)

- (id)objectFromJSONString;

- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;

- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;

- (id)mutableObjectFromJSONString;

- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;

- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;

@end

2. 用于解析NSData类型的JSON数据的分类

@interface NSData (JSONKitDeserializing)

// The NSData MUST be UTF8 encoded JSON.

- (id)objectFromJSONData;

- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;

- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;

- (id)mutableObjectFromJSONData;

- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;

- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;

@end

3. JSONKit 为NSDictionary,NSArray,NSString提供了将Obj-C对象转换为JSON数据的方法

- (NSData *)JSONData;

- (NSString *)JSONString;

<六>使用SBJson来处理JSON数据

SBJson的github地址:

网络请求之JSON解析的更多相关文章

  1. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

  2. C#网络请求与JSON解析

    最新学校的海康摄像头集控平台(网页端)不能在win10里登录,我寻思着拿海康的c# demo直接改. 首先得解决权限问题,每个教师任教不同年级,只能看到自己所在年级的设备,涉及到登录,在此记录一下C# ...

  3. iOS 自己封装的网络请求,json解析的类

    基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求 ...

  4. Flutter网络请求与JSON解析

    本文介绍如何在Flutter中创建HTTP网络请求和对请求的json string进行类型解析. 网络请求 官方使用的是用dart io中的HttpClient发起的请求,但HttpClient本身功 ...

  5. Android网络请求与数据解析,使用Gson和GsonFormat解析复杂Json数据

    版权声明:未经博主允许不得转载 一:简介 [达叔有道]软件技术人员,时代作者,从 Android 到全栈之路,我相信你也可以!阅读他的文章,会上瘾!You and me, we are family ...

  6. Flutter网络请求和数据解析

    一:前言 - 什么是反射机制,Flutter为什么禁用反射机制? 在Flutter中它的网络请求和数据解析稍微的比较麻烦一点,因为Flutter不支持反射机制.相信大家都看到这么一条,就是Flutte ...

  7. 使用Charles进行网络请求抓包解析

    使用Charles进行网络请求抓包解析 0. 懒人的福音(⌐■_■)(破解版下载地址,记得安装java库支持) http://pan.baidu.com/s/1c08ksMW 1. 查看电脑的ip地址 ...

  8. Swift 网络请求数据与解析

    一: Swift 网络数据请求与处理最常用第三方 又有时间出来装天才了,还是在学swift,从中又发现一些问题,这两天上网找博客看问题弄的真的心都累.博客一篇写出来,好多就直接照抄,就没有实质性的把问 ...

  9. 学习网络请求返回json对应的model

    原来泛型可以这样用: 网络返回基类,返回一个code,msg,body,其中body不确定,所以,我们把它写成泛型 import org.json.JSONObject; /** * 网络请求的基类 ...

随机推荐

  1. 这些HTML、CSS知识点,面试和平时开发都需要 No5-No7

    系列知识点汇总 这些HTML.CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML.CSS.盒子模型.内容布局) 这些HTML.CSS知识点,面试和平时开发都需要 No5-No7(知识 ...

  2. 控件使用经验-MVP模式+控件封装

    项目背景 几年前参与了一个面向学校的人事管理软件的开发,基于WinForm平台.今天主要想谈一谈其中关于控件的使用经验.这个项目我们大量使用了第三方控件.由于这个产品的生命周期很长,我们在设计时要考虑 ...

  3. 半连通分量--Tarjan/Kosaraju算法

    一个有向图称为半连通(Semi-Connected),满足:对于图中任两点u,v,存在一条u到v的有向路径或者从v到u的有向路径. 若满足,则称G’是G的一个导出子图. 若G’是G的导出子图,且G’半 ...

  4. jquery 删除cookie失效的解决方法

    最近在做网站退出功能的时候出现删除Cookie 的时候总是失效. 1.使用$.cookie("name","");  结果出来是生成了一个新的空值的cookie ...

  5. Adb connection Error:远程主机强迫关闭了一个现有的连接

    在用手机调试程序时,有时会出现“Adb connection Error:远程主机强迫关闭了一个现有的连接”的错误. 出现这种错误时,可以按照以下步骤解决: (1)运行cmd.exe,并将目录CD到\ ...

  6. How do you install mysql-connector-python (development version) through pip?

    12down votefavorite 8 http://stackoverflow.com/questions/31748278/how-do-you-install-mysql-connector ...

  7. 用 Inkspace 做 SVG 给 TPath

    FireMonkey 里的 TPathData 支持 SVG 的基本绘图指令,因此可以运用 Inkspace 软件,提取 SVG 的绘图内容,请见图片说明:

  8. Netbeans 8.2将支持PHP 7

    首先,将PHP项目的PHP版本设置为PHP 7.0. PHP 7其中一项新特性是返回类型声明,即PHP的函数和方法可以声明指定类型的返回值: PHP 7的另一项精彩的改进就是参数的标量类型声明,Net ...

  9. Mockups Mockplus 网页原型设计

    http://www.cocoachina.com/cms/wap.php?action=article&id=15319

  10. 2016弱校联盟十一专场10.3---Similarity of Subtrees(深搜+hash、映射)

    题目链接 https://acm.bnu.edu.cn/v3/problem_show.php?pid=52310 problem description Define the depth of a ...