DynamicJSON 2.0.2

DynamicJSON 2.0.2

Saoud Rizwan 维护。



DynamicJSON


Platform: iOS, macOS, watchOS, tvOS Language: Swift 4.2 License: MIT

安装使用许可

DynamicJSON 是一个基于 Swift 4.2 中由 Chris Lattner 引入的全新 @dynamicMemberLookup 功能构建的动态类型 JSON 解析器。这使我们能够访问在运行时解析的任意对象成员,使 Swift 在处理 JSON 时与 JavaScript 一样灵活。

之前

if let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],
   let user = jsonObject["user"] as? [String: Any],
   let username = user["username"] as? String {
	// ...
}

之后

let username = JSON(data).user.username.string

安装

pod 'DynamicJSON', '~> 2.0'

(如果遇到问题,请运行 pod repo update 并重试)

github "saoudrizwan/DynamicJSON"
  • 或者将 DynamicJSON.swift 拖放到您的项目中。

并在您想要使用它的文件中导入 import DynamicJSON

使用

1. 初始化🐣

将任何东西扔进一个 JSON 对象开始使用

let json = JSON(Data())
           JSON(123)
           JSON(["key": "value"])
           JSON(["element", 1])
           JSON("Hello world")
           JSON(false)

...或将文字值转换为 JSON

let json = "Hello world" as JSON
           123 as JSON
           [1, 2, 3] as JSON

let user: JSON = [
	"username": "Saoud",
	"age": 21,
	"address": [
	    "zip": "12345",
	    "city": "San Diego"
	]
]

2. 深入挖掘

像在 JavaScript 世界一样处理 JSON 对象

let dictionary = json.dictionary
let array = json[0].cars.array
let string = json.users[1].username.string
let nsnumber = json.creditCard.pin.number
let double = json[3][1].height.double
let int = json[0].age.int
let bool = json.biography.isHuman.bool

注意 JSON 实际上并没有 carsusers 这样的属性,而是使用动态成员查找遍历相关的 JSON 数据来找到你想要的对象。

如果你有一个实际的 JSON 属性作为键,比如 numberdescription,只需使用字符串下标访问器,如下所示

let number = json.account.contact["number"].number
let description = json.user.biography["description"].string

3. 享受乐趣 🤪

JSON 遵循 Comparable

let json1 = JSON(jsonData1)
let json2 = JSON(jsonData2)

// Equality applies to all types (Dictionary, Array, String, NSNumber, Bool, NSNull)
let isEqual = json1 == json2

// Less/greater than only applies to NSNumbers (Double, Int) and Strings
let isLessThan = json1 < json2
let isLessThanOrEqual = json1 <= json2
let isGreaterThan = json1 > json2
let isGreaterThanOrEqual = json1 >= json2

用于调试的美观打印

print(json)

转换为原始对象

let anyObject = json.object

转换为 Data

let data = json.data() // optionally specify options...

授权

DynamicJSON 使用 MIT 许可证。如果您有任何问题,或者希望分享您如何使用 DynamicJSON,请提交问题。

贡献

DynamicJSON 处于初期阶段,但为 Swift 中处理 JSON 提供了一种革命性的全新方法。请随意提交任何您认为可以增强 DynamicJSON 和其理念的特性的拉取请求。

有问题吗?

请通过以下邮箱或邮件[email protected]与我联系,或者通过Twitter @sdrzn。如果您遇到错误或希望添加功能,请提出问题

值得关注的部分