{
"values":[
[1,1,7,"Azuan Child","Anak Azuan","12345","ACTIVE","Morning",7,12,"2017-11-09 19:45:00"],
[28,1,0,"Azuan Child2","Amran","123456","ACTIVE","Evening",1,29,"2017-11-09 19:45:00"]
]
}
わかりました、これはサーバーから受け取った私のjson形式です
今、私はそれを自分の構造体にデコードしたいのですが、まだ運がありません。
struct ChildrenTable: Decodable {
var values: [[String]]?
}
そして、URLSession の呼び出し元メソッドは次のようになります
URLSession.shared.dataTask(with: request) { (data, response, err) in
guard let data = data else { return }
let dataAsString = String(data: data, encoding: .utf8)
print(dataAsString)
do {
let children = try
JSONDecoder().decode(ChildrenTable.self, from: data)
print (children)
} catch let jsonErr {
print ("Error serializing json: ", jsonErr)
}
}.resume()
そして、私が得たエラーは
Error serializing json:
typeMismatch(Swift.String, Swift.DecodingError.Context(codingPath: [Vito_Parent.ChildrenTable.(CodingKeys in _1B826CD7D9609504747BED0EC0B7D3B5).values, Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0)),
Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0))],
debugDescription: "Expected to decode String but found a number instead.", underlyingError: nil))
配列に int があることはわかっており、値に String をキャストするだけですvar values: [[String]]?
(このエラー ポップアップの理由)。ただし、Decodable のプロトコルに従っているため、構造体で多次元配列やタプルを使用することはできません。
また、「辞書をデコードすると予想されますが、代わりに配列が見つかりました」というエラーがスローされるため、データを辞書に変換することもできません。
この問題を解決するためのアイデアはありますか? データに文字列型をキャストしようとしましたが、まだうまくいきません...
p/s: すべての json 形式が文字列型であれば問題ありませんが、API から呼び出すため、それを変更する権限がありません。