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

Json 使用Freddy反序列化字符串列表,json,swift,Json,Swift,我在《斯威夫特》中用弗雷迪做实验: 我正在尝试反序列化字符串列表。我的Json如下所示: { "types": ["A", "B", "C"], } 以下是swift代码: import Freddy struct Config { let types: [JSON] } extension Config: JSONDecodable { public init(json: JSON) throws { types = try json.getArr

我在《斯威夫特》中用弗雷迪做实验:

我正在尝试反序列化字符串列表。我的Json如下所示:

{
    "types": ["A", "B", "C"],
}
以下是swift代码:

import Freddy

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

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

事实上,Freddy对象是JSON类型的——它的工作原理有点像SwiftyJSON

Freddy有一个名为
decodedArray()
的getter,它可以满足您的需要

例如:

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”]

数组


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

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