JSON

自己动手使用 Swift 打造全功能 JSON 解析、生成库(2)

字号+ 作者:H5之家 来源:H5之家 2017-03-29 16:01 我要评论( )

JSONNDElement 中: public var jsonString: String? { get { do { if let _ = self.data {return NSString(data: try NSJSONSerialization.dataWithJSONObject(self.data, options: .PrettyPrinted), encoding: NS

JSONNDElement 中:

public var jsonString: String? { get { do { if let _ = self.data { return NSString(data: try NSJSONSerialization.dataWithJSONObject(self.data, options: .PrettyPrinted), encoding: NSUTF8StringEncoding) as? String } else { return nil } } catch { return nil } } } public var jsonStringValue: String { get { if let i = self.jsonString { return i } else { return "" } } } 使用 Array、Dictionary 生成 JSON 对象

这一步操作我们将使用从 SwiftyJSON 中偷来的函数,稍加改装就可以利用了:

// stolen from SwiftyJSON extension JSONND: DictionaryLiteralConvertible { public init(dictionaryLiteral elements: (String, AnyObject)...) { self.init(jsonObject: elements.reduce([String : AnyObject]()){(dictionary: [String : AnyObject], element:(String, AnyObject)) -> [String : AnyObject] in var d = dictionary d[element.0] = element.1 return d }) } } // stolen from SwiftyJSON extension JSONND: ArrayLiteralConvertible { public init(arrayLiteral elements: AnyObject...) { self.init(jsonObject: elements) } }

代码的原理也很简单,利用系统的自动转换 protocol:DictionaryLiteralConvertible 和 ArrayLiteralConvertible,让 Array 和 Dictionary 自动转换为 JSONND 类型。现在我们可以采用这种方式定义 JSONND 对象了:

let dictionaryJSON: JSONND = ["a": 1, "b": [1, 2, 3]] let arrayJSON: JSONND = [0, 1, 2] 搞定! 检验成果

我已经给 JSONNeverDie 项目写了完整的单元测试来测试每一项功能,感兴趣的同学可以去 Github 查看 测试代码 。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • PWA(Progressive Web App)入门系列:(一)PWA简介

    PWA(Progressive Web App)入门系列:(一)PWA简介

    2017-03-23 09:01

  • 如何让ASP.NET WEB API 默认回应JSON 格式

    如何让ASP.NET WEB API 默认回应JSON 格式

    2017-03-21 14:00

  • 软件开发外包中API设计学习之Github

    软件开发外包中API设计学习之Github

    2017-03-20 15:00

  • app 提升webview效率,用app本地存html模板,从服务器读json,用

    app 提升webview效率,用app本地存html模板,从服务器读json,用

    2017-03-17 09:00

网友点评
s