JsonSerialize 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
JsonSerialize 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
JsonSerialize 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 Swift
操作系统 OS X
软件类型 开源软件
开源组织
地区 不详
投 递 者 linuxhitlover
适用人群 未知
收录时间 2014-07-16

软件简介

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


展开阅读全文

代码

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
0 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部