44-Swift 之 JSONSerialization

一 、JSONSerialization 的介绍

Apple从 IOS5.0 推出 SDK 自带的 JSON 解析对象 NSJSONSerialization 。而在 Swift3.0 被更名为 JSONSerialization 。JSONSerialization是一个非常好用的JSON生成和解析工具,效率也比其他第三方开源项目高。

》》 使用说明:(官网说明)
JSONSerialization 能将JSON 转化成Foundation 对象,也能将Foundation对象转换生JSON。但是转换的前提条件是:
1、顶层对象必须是 Array & Dictionary 。
2、所有的对象必须是NSString,NSNumber,NSArray,NSDictionary, or NSNull 中的一个。
3、所有Dictionary的key必须是 String 。
4、Number 对象不能是非数值和无穷值。
注意: 在使用 JSONSerialization.isValidJSONObject(obj: Any) 来判断是否可以转化。

二、JSONSerialization 的使用说明

1、将Function 对象转化成 JSON 对象

// TODO : Function 对象转JSON
func functionToJSON(object:Any) -> Data {
    /**
     先判断是否可以转换
     */
    if !JSONSerialization.isValidJSONObject(object) {
         return Data.init()
    }
    /**
     开始转换
     JSONSerialization.WritingOptions.prettyPrinted 是输出JSON时的格式更容易查看。
     */
    return try! JSONSerialization.data(withJSONObject: object, options: .prettyPrinted)
}

2、 将JSON 对象转化成Function 的对象

// TODO : JSON对象转Function

func JSONToFunction(AnyData:Data) -> Any {
    /**
     判断是否可以转换
     */
    if JSONSerialization.isValidJSONObject(AnyData) {
         return NSNull.init()
    }
    /**
     开始转化
     */
    return try! JSONSerialization.jsonObject(with: AnyData, options: .mutableContainers)
}

3、 上面个两个函数的使用

1、数组的转换
 // 数组
let  ArrayFunc = ["刘婵","小乔","吕布"]
// 转换
let ArrayJsonData = self.functionToJSON(object: ArrayFunc)
// 解码
let ArrayUJson = self.JSONToFunction(AnyData: ArrayJsonData)
// 输出
print(ArrayUJson)
/**
 输出结果
 (
 "\U5218\U5a75",
 "\U5c0f\U4e54",
 "\U5415\U5e03"
 )
 */

2、字典的转化
 // 字典
let Dictionary  = ["A":"安其拉","B":"BBB","C":"蔡文姬"]
// 转换
let DictionaryJsonData = self.functionToJSON(object: Dictionary)
// 解码
let DictionaryUJson = self.JSONToFunction(AnyData: DictionaryJsonData)
// 输出
print(DictionaryUJson)
/**
 输出结果
 {
 A = "\U5b89\U5176\U62c9";
 B = BBB;
 C = "\U8521\U6587\U59ec";
 }

 */

4、 JSON 对象写入一个数据流中的函数

// TODO : 将一个JSON的对象写入一个流中
func writeJSONDataToStream(jsonData:Any,stream:OutputStream) -> (Int,NSError) {
    /**
     判断是否可以写入
     */
    
    var error :NSError?
    if JSONSerialization.isValidJSONObject(jsonData) {
        return (JSONSerialization.writeJSONObject(jsonData, to: stream, options: .prettyPrinted, error: &error),error!)
    }
    return (0,error!)
}

5、从一个数据流中获取JSON 对象

// TODO : 从一个流中获取数据
func getJsonAnyForStream(stream:InputStream) -> Any {
    return try! JSONSerialization.jsonObject(with: stream, options: .mutableContainers)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,617评论 4 59
  • 目录 第六章:猫眼李志成像抓野猪似的把我拖回了别墅。他很开心,哼着小曲,带着我进了卧室。 “变态?”我不由得菊门一...
    阿洛特斯阅读 201评论 0 1
  • 为何我如此的纠结,时隔一个多月中断写文章,这对于我自己来说是一次很糟糕的体验,这种体验增多了就会变成负能量,就会变...
    吴德宽阅读 153评论 0 0
  • A. 虎嗅职场丧T,样式可参考下图: B. 根据各位老板的工作和个人需求来自定义文字,再配上统一的Q版龙图案,例如...
    是大豪哥了啦阅读 190评论 0 0
  • 又是一个大课间,又是一年跳绳比赛。 大家都很努力地跳跃,奋力为集体加分。 尽管中间有几次出状况,但是,没有人放弃,...
    尘世里的栀子花阅读 242评论 0 0