JsonSerialize

码农软件 · 软件分类 · JSON/BSON开发包 · 2019-03-31 13:12:11

软件介绍

JsonSerialize 是提供安全的方法来编码和解码 Swift 对象为 JSON。

示例:

class TestSubStruct: ToJson, FromJson {
    let foo = "bar"

    init(foo: String) {
        self.foo = foo
    }

    func toJson() -> Json {
        return Json.Object(["foo": foo.toJson()])
    }

    class func fromJson(json: Json) -> TestSubStruct? {
        let decoder = JsonDecoder(json: json)
        if let value: String = decoder.readValue("foo") {
            return TestSubStruct(foo: value)
        }
        return nil
    }}class TestStruct: ToJson, FromJson {
    let int    = 123
    let float  = 123.0
    let string = "foo"
    let bool   = true
    let array  = ["foo"]
    var dict   = ["foo": "bar"]
    var sub    = TestSubStruct(foo: "bar")

    init() {}
    init(json: Json) {
        let decoder = JsonDecoder(json: json)
        int    = decoder.readValue("int")!
        float  = decoder.readValue("float")!
        string = decoder.readValue("string")!
        bool   = decoder.readValue("bool")!
        array  = decoder.readArray("array")!
        dict   = decoder.readDictionary("dict")!
        sub    = decoder.readValue("sub")!
    }

    func toJson() -> Json {
        let json = [
            "int":    int.toJson(),
            "float":  float.toJson(),
            "string": string.toJson(),
            "bool":   bool.toJson(),
            "array":  Json.fromArray(array),
            "dict":   Json.fromDictionary(dict),
            "sub":    sub.toJson(),
            "null":   Json.Null
            ]
        return Json.Object(json)
    }

    class func fromJson(value: Json) -> TestStruct? {
        return value.object ? TestStruct(json: value) : nil
    }}class JsonSerializeTests: XCTestCase {

    func testJsonEncode() {
        let testObject = TestStruct()
        let expected = "{\"int\":123.0,\"bool\":true,\"null\":null," +
        "\"array\":[\"foo\"],\"dict\":{\"foo\":\"bar\"}," +
        "\"float\":123.0,\"string\":\"foo\",\"sub\":{\"foo\":\"bar\"}}"
        let encoded = testObject.toJson().toString()
        XCTAssert(encoded == expected, "Invalid JSON: \(encoded)")
    }

    func testJsonEncodeOptional() {
        var test: Int?
        XCTAssert(Json.fromOptional(test).toString() == "null", "Should be Null")

        test = 10
        XCTAssert(Json.fromOptional(test).toString() == "10.0", "Should be 10.0")
    }

    func testJsonDecode() {
        let jsonString = "{\"int\":321.0,\"bool\":false," +
        "\"array\":[\"bar\"],\"dict\":{\"bar\":\"baz\"}," +
        "\"float\":321.0,\"string\":\"bar\",\"sub\":{\"foo\":\"bar\"}}"

        let decoder = JsonDecoder(jsonString: jsonString)
        let decoded = TestStruct(json: decoder.json)

        XCTAssert(decoded.int == 321, "Invalid int value")
        XCTAssert(decoded.bool == false, "Invalid bool value")
        XCTAssert(decoded.array == ["bar"], "Invalid array value")
        XCTAssert(decoded.dict == ["bar": "baz"], "Invalid dic value")
        XCTAssert(decoded.float == 321.0, "Invalid float value")
        XCTAssert(decoded.string == "bar", "Invalid string value")
        XCTAssert(decoded.sub.foo == "bar", "Invalid sub value")
    }}


本文地址:https://www.codercto.com/soft/d/2552.html

学习JavaScript数据结构与算法

学习JavaScript数据结构与算法

[巴西] 格罗纳(Loiane Groner) / 孙晓博、邓钢、吴双、陈迪、袁源 / 人民邮电出版社 / 2015-10-1 / 39.00

本书首先介绍了JavaScript语言的基础知识,接下来讨论了数组、栈、队列、链表、集合、字典、散列表、树、图等数据结构,之后探讨了各种排序和搜索算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序、顺序搜索、二分搜索,还介绍了动态规划和贪心算法等常用的高级算法及相关知识。一起来看看 《学习JavaScript数据结构与算法》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具