<一>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. dp - 2016腾讯笔试 A

    2016腾讯笔试 A Problem's Link -------------------------------------------------------------------------- ...

  2. Fiddler 抓取手机APP数据包

    Fiddler是一个调试代理,下载地址http://www.telerik.com/download/fiddler 下载安装运行后,查出运行机器的IP,手机连接同一网域内的WIFI,手机WIFI连接 ...

  3. sql查询重复记录和from子查询

    select name from (SELECT name,count(name) as countFROM Table WHERE (OrgUUId = (select top 1 uuid fro ...

  4. LocalDB:微软的新生代轻量级数据库

    什么是LocalDB 随着SQL Server 2012的发布,LocalDB跃入我们的视线,它可以被看做是SQL Server Express的轻量级版本.LocalDB专门为开发人员创建,它非常易 ...

  5. 启用数据库的 Service Broker

    --is_broker_enabled为0未启用,为1启用SELECT name,is_broker_enabled FROM sys.databases WHERE name = 'DBNAME' ...

  6. css背景图

  7. Debian7安装GCC4.8

    参考一  参考二   参考三   参考四 Ubuntu13.04下编译GCC-4.8.2源码并安装成功 CentOS 6编译安装GCC4.8      CentOS 6.4系统编译安装gcc-4.8. ...

  8. 传智播客JavaWeb听课总结

    一. JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本兼容低版本的 ...

  9. 求助,eclipse总是卡在building workspace-CSDN论坛

    1).解决方法 方法1.修改eclipse启动文件 eclipse.ini 中添加启动参数参数: -vmargs -Xmx512m 方法2.关闭自动构建工作区: project -> build ...

  10. uums

    http://blog.csdn.net/hudon/article/details/1506042 http://www.cnblogs.com/biakia/p/4779655.html http ...