我有一个示例JSON,它只是一个字符串数组,没有键,并且想使用Decodable
协议来使用JSON并从中创建一个简单模型。
json看起来像这样:
{ "names": [ "Bob", "Alice", "Sarah"] }
只是一个简单数组中的字符串集合。
我不确定的是如何使用新的Swift Decodable
协议将其读入没有密钥的模型中。
我见过的大多数示例都假设JSON具有密钥。
IE:
// code from: Medium article: https://medium.com/@nimjea/json-parsing-in-swift-2498099b78f
struct User: Codable{
var userId: Int
var id: Int
var title: String
var completed: Bool
}
do {
//here dataResponse received from a network request
let decoder = JSONDecoder()
let model = try decoder.decode([User].self, from:
dataResponse) //Decode JSON Response Data
print(model)
} catch let parsingError {
print("Error", parsingError)
}
以上示例假定json是键值;如何使用可解码协议对不带密钥的JSON进行解码?
谢谢
答案 0 :(得分:3)
对于json的这种简单结构,我想最好不要创建任何结构并使用
let model = try decoder.decode([String:[String]].self, from: dataResponse)
print(model["names"])
适合您模型的json是
{
"names": [{
"userId": 2,
"id": 23,
"title": "gdgg",
"completed": true
}]
}
struct Root: Codable {
let names: [User]
}
struct User: Codable {
let userId, id: Int
let title: String
let completed: Bool
}
答案 1 :(得分:2)
此JSON的对应结构为
struct User: Decodable {
let names: [String]
}
并解码
let model = try decoder.decode(User.self, from: dataResponse)
并使用
获取名称let names = model.names
或传统上没有JSONDecoder
let model = try JSONSerialization.jsonObject(with: dataResponse) as? [String:[String]]