使用Freddy反序列化字符串列表

时间:2016-11-01 22:34:08

标签: json swift

我在Swift中试验Freddy:

https://github.com/bignerdranch/Freddy

我正在尝试反序列化字符串列表。我的Json看起来像这样:

{
    "types": ["A", "B", "C"],
}

这里是快速代码:

import Freddy

struct Config {
    let types: [JSON]
}
extension Config: JSONDecodable {
    public init(json: JSON) throws {
        types = try json.getArray(at: "types")
    }
}

这一切似乎都正确加载,但是我无法将字符串列表作为实际的字符串数组 - 它们是JSON类型的数组。我该怎么做才能将这些字母映射成字符串?

1 个答案:

答案 0 :(得分:1)

实际上,Freddy对象属于JSON类型 - 它的工作方式与SwiftyJSON类似。

弗雷迪有一个名为decodedArray()的吸气剂,可以满足你的需要。

示例:

struct Config {
    let types: [String]
}

extension Config: JSONDecodable {
    public init(json: JSON) throws {
        types = try json.decodedArray(at: "types", type: String.self)
    }
}

// instances
let json = try! JSON(data: data)
let c = try! Config(json: json)

//tests
print(c.types)
print(type(of: c.types))

打印:

["A", "B", "C"]
Array<String>

如果您希望将“类型”保留为JSON数组而不是String数组,请使用原始代码并使用Freddy的getString() getter和flatMap提取字符串:

// here .types is [JSON]
let strings = c.types.flatMap { try? $0.getString() }