Freddy JSON - копирование коллекции в новый массив - PullRequest
0 голосов
/ 26 апреля 2018

В Freddy JSON с Swift существует расширение для ...

«Создать экземпляр, скопировав каждый элемент collection в новый Array», как определено в примечаниях Фредди ниже ...

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 голосов
/ 26 апреля 2018

Почему вы не используете протокол Codable, предоставляемый Swift из коробки?

Учитывая ваш 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, что делает код намного более легким для чтения. Но в этом случае это невозможно, поскольку нет полей с фиксированным именем.

...