美文网首页iOS Developer
[iOS Foundation] NSJSONSerializa

[iOS Foundation] NSJSONSerializa

作者: 段子周 | 来源:发表于2016-05-17 21:27 被阅读82次

概述

You use the NSJSONSerialization class to convert JSON to Foundation objects and convert Foundation objects to JSON.

官方文档给出的解释如上。在现在流行架构中开发移动端项目,这个类是基本上大家都会用到的,所以有必须要仔细学习一下。

一个对象要转成JSON,必须满足下列条件:

  • 顶级对象是NSArray或者NSDictionary
  • 所有的对象都必须是NSString, NSNumber, NSArray, NSDictionary或者NSNull类的实例
  • 所有的字典Keys都是NSString的实例
  • 所有的数字都不是NaN(Not a Number)或者无穷大

也可能还有其他的规则。调用isValidJSONObject或者尝试转换一下才是决定对象是否能被转换为JSON的最终方法。

Foundation对象转化为JSON

+ dataWithJSONObject:options:error:
这里是转化为JSON,所以options是NSJSONWritingOptions,里面只有一个Enum是NSJSONWritingPrettyPrinted,意思是生成的JSON会以设计好的带空格的格式展示,比较可读;不设置的话(一般就是0,也可以定义一个字面常量来表示)就是最紧凑的JSON写法。

+ writeJSONObject:toStream:options:error:
与第一个方法类同,只是直接将Foundation对象写入流

+ isValidJSONObject:
用来判断是否是合规的可以转为JSON的Foundation对象

从JSON创建Foundation对象

+ JSONObjectWithData:options:error:
这里是读取JSON,所以options是NSJSONReadingOptions,有三个Enum值:

  • NSJSONReadingMutableContainers 从JSON创建的arrays和dictionaries是mutable的
  • NSJSONReadingMutableLeaves从JSON创建的对象表的叶子字符串是可变字符串
  • NSJSONReadingAllowFragments解析器允许最顶级对象不是NSArray或者NSDictionary的实例

上面的Enum值都是用来规定读取的对象的格式,以方便你后续操作想要修改结果(对于这做法的必要性表示不太理解,即便是返回immutable的,仍然后续自己变成mutable,为什么要在api中加参数来解决?)

+ JSONObjectWithStream:options:error:
与第一个方法类同,只是从流中直接创建Foundation对象

相关文章

网友评论

    本文标题:[iOS Foundation] NSJSONSerializa

    本文链接:https://www.haomeiwen.com/subject/xwbbrttx.html