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)
}

你可能感兴趣的:(44-Swift 之 JSONSerialization)