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

  • 相关阅读:
    POJ 1703 Find them, Catch them
    POJ 2236 Wireless Network
    POJ 2010 Moo University
    POJ 2184 Cow Exhibition
    POJ 3280 Cheapest Palindrome
    POJ 3009 Curling 2.0
    POJ 3669 Meteor Shower
    POJ 2718 Smallest Difference
    POJ 3187 Backward Digit Sums
    POJ 3050 Hopscotch
  • 原文地址:https://www.cnblogs.com/denz/p/5293603.html
Copyright © 2011-2022 走看看