这是我的代码。但我不知道该如何设定价值。它必须手动完成,因为实际结构比这个例子稍微复杂一些。
请帮忙吗?
struct Something: Decodable {
value: [Int]
enum CodingKeys: String, CodingKeys {
case value
}
init (from decoder :Decoder) {
let container = try decoder.container(keyedBy: CodingKeys.self)
value = ??? // < --- what do i put here?
}
}
答案 0 :(得分:24)
由于一些错误/拼写错误,您的代码无法编译。
解码Int
写入
struct Something: Decodable {
var value: [Int]
enum CodingKeys: String, CodingKey {
case value
}
init (from decoder :Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
value = try container.decode([Int].self, forKey: .value)
}
}
但如果问题中的示例代码代表整个结构,则可以将其缩减为
struct Something: Decodable {
let value: [Int]
}
因为可以推断出初始值设定项和CodingKeys
。
答案 1 :(得分:4)
感谢Joshua Nozzi的暗示。这是我实现解码Int:
数组的方法let decoder = JSONDecoder()
let intArray = try? decoder.decode([Int].self, from: data)
无需手动解码。
答案 2 :(得分:1)
就我而言,this answer很有帮助
我有一个 JSON 格式: @Controller
@RequestMapping("/ui/foo")
public class FooController {
@RequestMapping(method = RequestMethod.GET) // You can use @GetMapping
public ModelView homePage(Model model) {
// set model attributes
return "home"; // this will be mapped to home view jsp/thyme/html
}
}
因此,您无需按键即可解码数据
"[ "5243.1659 EOS" ]"
struct Model: Decodable {
let values: [Int]
init(from decoder: Decoder) throws {
var container = try decoder.unkeyedContainer()
let values = try container.decode([Int].self)
self.values = values
}
}
答案 3 :(得分:0)
或者您也可以通用:
let decoder = JSONDecoder()
let intArray:[Int] = try? decoder.decode(T.self, from: data)