在swift4中使用Codable解析2D数组

问题描述 投票:0回答:2

我需要使用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!)
ios swift4 xcode9 codable jsonparser
2个回答
3
投票

有三个基本问题

  • primary_keyforeign_key的值是String,而不是Int。有一个简单的规则:用双引号括起来的每个JSON值都是字符串,甚至是"1""false"
  • 有一个根对象是一个包含一个密钥list的字典。
  • data(using:String不是throw所以用try标记是错误的。

此代码使用Swift命名约定,camelCased和lowercased变量名称和大写结构名称

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) }

0
投票

看到这个

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)
}
}
© www.soinside.com 2019 - 2024. All rights reserved.