Swift-使用Decodable解码仅字符串的JSON数组

时间:2019-03-02 13:58:53

标签: json swift

我有一个示例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进行解码?

谢谢

2 个答案:

答案 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]]