使用Swift4中的Codable解析2D数组



我需要使用Swift 4中的Codable解析二维数组,请让我如何做。以下是我的代码

var exclusive = “””
{“list”:[[{“primary_key”:”1",”foreign_key”:”3"},{“primary_key”:”2",”foreign_key”:”10"}],[{“primary_key”:”2",”foreign_key”:”10"},{“primary_key”:”3",”foreign_key”:”22"}]]}
“””
let exeString = try! exclusive.data(using: .utf8)
struct ListStruct : Codable {
struct listStruct :Codable {
 let primary_key : Int
 let foreign_key : Int
 }
 let list = [[listStruct]] ()
 or
 let list = [][listStruct]
}
let listofData = try! JSONDecoder().decode(ListStruct.self, from: exeString!)

有三个基本问题

  • primary_keyforeign_key的值是字符串,而不是Int。有一个简单的规则: double引号包裹的每个JSON值都是字符串,甚至"1""false"

  • 有一个root对象,它是一个包含一个键list的字典。

  • Stringdata(using: throw ,因此用 try进行标记是错误的。


此代码使用Swift命名约定,骆驼级和下降的变量名称和大量的struct name

let exeString = """
{"list":[[{"primary_key":"1","foreign_key":"3"},{"primary_key":"2","foreign_key":"10"}],[{"primary_key":"2","foreign_key":"10"},{"primary_key":"3","foreign_key":"22"}]]}
"""

struct Root : Decodable {
    let list : [[ListStruct]]
}
struct ListStruct :Codable {
    private enum CodingKeys : String, CodingKey {
        case primaryKey = "primary_key"
        case foreignKey = "foreign_key"
    }
    let primaryKey : String
    let foreignKey : String
}

do {
    let data = Data(exeString.utf8)
    let result = try JSONDecoder().decode(Root.self, from: data)
    print(result.list)
} catch { print(error) }

请参阅此

struct Language: Codable {
var name: String
var version: Int
}
let swift = Language(name: "Swift", version: 4)
let encoder = JSONEncoder()    
if let encoded = try? encoder.encode(swift) {
if let json = String(data: encoded, encoding: .utf8) {
print(json)
}
let decoder = JSONDecoder()
 if let decoded = try? decoder.decode(Language.self, from: encoded) {
 print(decoded.name)
}
}

最新更新