<一>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. [Server] 搭建发布环境Web Deploy

    在Web Deploy前,实际上完全可以使用FTP方式发布网站. 如果你购买的只是虚拟空间,那FTP方式更广泛. 先来搭建一套FTP吧 添加FTP服务 在网站上添加FTP发布 配置FTP服务 FTP注 ...

  2. Ionic2学习笔记(1):新建一个页面

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5532323.html                 新建一个页面: 借上一篇中的HelloWorl ...

  3. sqlserver 服务器主体 无法在当前安全上下文下访问数据库

    今天使用sqlserver,发现了一个问题,就是使用 insert into 数据库名.dbo.表名(字段) values(值) 这样语句的时候,会返回错误: sqlserver 服务器主体 无法在当 ...

  4. WPF系列:样式

    一般简单的样式我们可以直接写在控件中 <Button Canvas.Left="20" Canvas.Top="30" Width="100&q ...

  5. Sandcastle入门:创建C#帮助文档

    Sandcastle入门:创建C#帮助文档 今天学到了一个东西:利用vs2005生成的dll/xml来生成帮助文档. 完成这个伟大任务的是Sandcastle,微软推出的类库文档编译工具. 在开始这篇 ...

  6. js带上框架和防止被iframe的代码

    1.永远都会带着框架<script language="JavaScript"><!--if (window == top)top.location.href = ...

  7. Apache+PHP 配置随笔

    准备安装包 1:安装VC++ 2012(vcredist_x64,我这边服务器为64位) 2:Apache安装包,php安装包 安装后配置工作 1:安装Apache服务,配置环境变量 httpd -k ...

  8. 【VBS】vbs指定编码保存文本文件(含xml、ini什么的)

    本文还是折腾安装包期间衍生出来的产物. 我那安装包在安装期间有这个动作: - 让用户填写一些信息,待安装完成后把这些信息写入软件安装目录中的指定ini.xml文件中 上文说的是如何用vbs写ini,i ...

  9. [Android] 环境配置之正式版Android Studio 1.0

    昨天看见 Android Studio 1.0 正式版本发布了:心里挺高兴的. 算是忠实用户了吧,从去年开发者大会一开始出现 AS 后就开始使用了:也是从那时开始就基本没有用过 Eclipse 了:一 ...

  10. Entity Famework 的通过IOC注入实现

    1. 前言 最近刚换了一家公司,由于之前的公司代码并没有用到项目框架,需要我整理下NHibernate与Entity Framework之间的区别及适用性.并写出相关的示例代码 面试的时候吹的牛,得把 ...