前提・実現したいこと
プログラミング初心者です。
SwiftUIでネストされたJSONファイルをリスト化するシステムを作っています。
PlaygroundsでJSONファイルをデコードする機能を実装中に以下のエラーメッセージが発生しました。
解決方法を教えていただけないでしょうか。
発生している問題・エラーメッセージ
Error decoding JSON: typeMismatch(Swift.Array<Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Array<Any> but found a dictionary instead.", underlyingError: nil))
該当のソースコード
Swift
1import SwiftUI 2import PlaygroundSupport 3 4let todosEndpoint = "ここにJSONファイルのURLを記載しました。(内容は下記の「JSON」に記載しています。)" 5 6struct Todo: Codable, Identifiable { 7 let id :UUID 8 let t1,t2,t3: Times 9 10 struct Times:Codable, Identifiable { 11 let id: String 12 let name : String 13 } 14} 15 16typealias Todos = [Todo] 17 18class TodoDownloader: ObservableObject { 19 @Published var todos: Todos = [Todo]() 20 init() { 21 guard let url = URL(string: todosEndpoint) else { return } 22 URLSession.shared.dataTask(with: url) { (data, response, error) in 23 do { 24 guard let data = data else { return } 25 let todos = try JSONDecoder().decode(Todos.self, from: data) 26 DispatchQueue.main.async { 27 self.todos = todos 28 } 29 } catch { 30 print("Error decoding JSON: ", error) 31 } 32 }.resume() 33 } 34} 35 36struct contentView: View { 37 @ObservedObject var todoData: TodoDownloader = TodoDownloader() 38 39 var body: some View { 40 NavigationView { 41 List(self.todoData.todos) { todo in 42 Text(todo.t1.name) 43 } 44 .navigationBarTitle(Text("To Do List")) 45 } 46 } 47} 48 49#if DEBUG 50struct contentView_Previews: PreviewProvider { 51 static var previews: some View { 52 contentView() 53 } 54} 55#endif 56 57PlaygroundPage.current.liveView = UIHostingController(rootView: contentView())
JSON
1{"t1":{"id":"001","name":"hoge1"}, 2"t2":{"id":"","name":""}, 3"t3":{"id":"003","name":"hoge2"},
補足情報(FW/ツールのバージョンなど)
Xcode11.2.1,SwiftUI
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/05 06:41
2019/12/05 06:46
2019/12/05 06:57
2019/12/05 07:03
2019/12/05 07:59
2019/12/05 08:35
2019/12/05 08:54
2019/12/05 08:55
2019/12/18 02:48 編集