zoukankan      html  css  js  c++  java
  • 网络请求之JSON解析

    <一>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地址:

  • 相关阅读:
    mount 需要同时设置 noatime 和 nodiratime 吗?
    xfsdump命令使用
    查看linux设备文件系统类型的方法
    Elasticstack 5.1.2 集群日志系统部署及实践
    Kickstart无人值守安装[转载]
    mytop安装,使用mytop监控MySQL性能
    使用Anemometer分析MySQL慢查询记录
    (总结)Web性能压力测试工具之WebBench详解
    mysqlsla快速入门
    Linux下MySQL慢查询分析mysqlsla安装使用
  • 原文地址:https://www.cnblogs.com/denz/p/5293603.html
Copyright © 2011-2022 走看看