我有一个JSON解码器,但有几个问题。首先,我正在做的事情和使用 JSON 系列化函数有什么区别?
我的下一个问题是关于文件和 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)
Codable
基于JSONSerialization
,并提供了一种直接从结构/类中对JSON进行/解码的便捷方法。
URL
只是指向某个位置的指针。您必须在给定的URL
从文件中加载Data
并请用起始大写字母命名结构
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) }