How to manually decode an an array in swift 4 Codable?

Viewed 21106

Here is my code. But I do not know what to set the value to. It has to be done manually because the real structure is slightly more complex than this example.

Any help please?

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?
   }
}
4 Answers

Swift 5.1

In my case, this answer was very helpful

I had a JSON in format: "[ "5243.1659 EOS" ]"

So, you can decode data without keys

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
    }
}
let decoder = JSONDecoder()
let result = try decoder.decode(Model.self, from: data)

Or you can do it generic:

let decoder = JSONDecoder()
let intArray:[Int] = try? decoder.decode(T.self, from: data) 
Related