Быстрый ввод данных JSON из файла и декодирование - PullRequest
0 голосов
/ 27 августа 2018

У меня есть JSON-декодер, но у меня есть пара вопросов.Во-первых, в чем разница между тем, что я делаю, и использованием функции JSONSerialization?

Мой следующий вопрос о файлах и JSON.Как мне получить пользовательский файл для передачи в мою программу для декодирования его данных JSON.Я предполагаю, что мой файл находится в комплекте, следовательно, вторая строка кода, но отсюда я не уверен, куда идти.

let input = readLine()
let url = Bundle.main.url(forResource: input, withExtension: "json")!


struct jsonStruct: Decodable {
    let value1: String
    let value2: String
}


// JSON Example
let jsonString = """
{
"value1": "contents in value 1",
"value2": "contents in value 2"
}
"""

// Decoder
let jsonData = url.data(using: .utf8)!//doesn't work, but works if 'url' is changed to 'jsonString'
let decoder = JSONDecoder()
let data = try! decoder.decode(jsonStruct.self, from: jsonData)
print(data.value1)
print(data.value2)

1 Ответ

0 голосов
/ 27 августа 2018

Codable основан на JSONSerialization и предоставляет удобный способ для включения / декодирования JSON непосредственно из / в структуры / классы.

URL - это просто указатель на местоположение.Вы должны загрузить Data из файла с указанным URL

И, пожалуйста, назовите структуру с начальной заглавной буквой

struct JsonStruct: Decodable {
    let value1: String
    let value2: String
}

let url = Bundle.main.url(forResource: input, withExtension: "json")!
do {
    let jsonData = try Data(contentsOf: url)
    let decoder = JSONDecoder()
    // the name data is misleading
    let myStruct = try decoder.decode(JsonStruct.self, from: jsonData)
    print(myStruct.value1)
    print(myStruct.value2)

} catch { print(error) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...