{
"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"]
]
}
[OK]を、これは私がスウィフト4 JSON復号可能な
は、今私は私の構造体にそれを解読したいが、まだそれには運を持っていないサーバーから受信した私の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()
のように見えると私が得たエラーは、私はint型の配列であります知っていると私は唯一の文字列をキャスト
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))
です値var values: [[String]]?
(なぜこのエラーポップアップの理由)が、私は単純に任意の多次元配列またはタプルを自分の構造体で使用することはできませんので、Decodableのプロトコルに従います。
それはエラーがスローされますので、私はまた、任意のアイデアは、この問題を解決するには、辞書に「辞書を復号化するために期待されたが見つから配列の代わりに」
データを変換することはできませんか?私はデータに文字列型をキャストしようとしましたが、まだ運がありませんでした...
p/s:json形式はすべて文字列型であれば問題ありませんが、それはAPIからです
おかげで、非常に巧妙のために使用することができますので、私は少し変更したが、これは複数を扱うときに実行するためのベストプラクティスですJSONDecoderに使用するjsonの配列を入力しますか? –
私はマルチタイプの配列で遭遇するのは初めてです。正直言って、私はjsonが無効だと思った。個人的には、マルチ型配列の配列を送る代わりに、私はバックエンドからオブジェクトの配列を送ります。 –
構造体よりも列挙型を使うほうが良いかもしれません。 – JeremyP