Freddy JSON - 将集合复制到新阵列中

时间:2018-04-26 15:56:44

标签: json swift deserialization

在使用Swift的Freddy JSON中,存在扩展......

"通过将collection的每个元素复制到新的Array"来创建实例,如以下Freddy注释中所定义的那样...

public init<Collection>(_ collection: Collection) where Collection : Collection, Collection.Element == Freddy.JSON

// Create an instance initialized with `elements`.
public init(arrayLiteral elements: Freddy.JSON...)

鉴于我已有数据,这个初始值设定器是如何使用的?以下通常的方式转换数据很好,但我不确定将数据复制为集合的语法。

let json = try JSON(data: data)

如果有帮助,我的目的是获取每个数组的内容并从中创建一个新对象。

[{
    "array1": [{
        "array1keys": "example",
    }],
    "array2": [{
        "array2keys": "example"
    }]
}]

1 个答案:

答案 0 :(得分:0)

为什么不使用Swift开箱即用的Codable协议?

鉴于你的json

let data = """
[
    {
        "array1": [
        {
            "array1keys": "example",
        }
        ],
        "array2": [
        {
            "array2keys": "example"
        }
        ]
    }
]
""".data(using: .utf8)!

我们可以定义代表您数据的类型

typealias SubElement = [String:String]
typealias Element = [String:[SubElement]]
typealias Response = [Element]

最后我们可以解码你的json

if let response = try? JSONDecoder().decode(Response.self, from: data) {
    print(response)
}

[["array1": [["array1keys": "example"]], "array2": [["array2keys": "example"]]]]
  

通常我建议定义符合Codable的结构,这使得代码更容易阅读。但在这种情况下,这是不可能的,因为没有固定名称的字段。