前提・実現したいこと
SwiftUIにおけるJSONファイル読み込みに関するエラー 【Invalid value around character 0】
発生している問題, エラーメッセージ
SwiftUIチュートリアルを基に作成したい
チュートリアルと同じように書いたのですが解決できないので質問します
Fatal error: Couldn't parse ***.json as Array<AddCity>:
dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))): file ***.swift, line 33
該当のソースコード
JSON
1var json = [ 2 { 3 "name": "とりひで", 4 "id": 1001 5 }, 6 { 7 "name": "とりひで2", 8 "id": 1002 9 } 10]
SwiftUI
1import SwiftUI 2 3struct ShopList: View { 4 var body: some View { 5 List(ShopData) { AddCity in 6 ShopRow(AddCity: AddCity) 7 8 } 9 .navigationBarTitle(Text("Addcity")) 10 11 } 12} 13 14struct LandmarkList_Previews: PreviewProvider { 15 static var previews: some View { 16 ForEach(["iPhone SE", "iPhone XS Max"], id: .self) { deviceName in 17 ShopList() 18 .previewDevice(PreviewDevice(rawValue: deviceName)) 19 .previewDisplayName(deviceName) 20 } 21 } 22}
SwiftUI
1import UIKit 2import SwiftUI 3 4let ShopData: [AddCity] = load("ShopData.json") 5 6func load<T: Decodable>(_ filename: String, as type: T.Type = T.self) -> T { 7 let data: Data 8 9 guard let file = Bundle.main.url(forResource: filename, withExtension: nil) 10 else { 11 fatalError("Couldn't find (filename) in main bundle.") 12 } 13 14 do { 15 data = try Data(contentsOf: file) 16 } catch { 17 fatalError("Couldn't load (filename) from main bundle:\n(error)") 18 } 19 20 do { 21 let decoder = JSONDecoder() 22 print(data) 23 return try decoder.decode(T.self, from: data) 24 } catch { 25 fatalError("Couldn't parse (filename) as (T.self):\n(error)") 26 } 27}
SwiftUI
1import SwiftUI 2 3struct ShopRow: View { 4 var AddCity: AddCity 5 6 var body: some View { 7 Text(verbatim: AddCity.name) 8 } 9} 10 11 12 13 struct ShopRow_Previews: PreviewProvider { 14 static var previews: some View { 15 Group { 16 ShopRow(AddCity: ShopData[0]) 17 ShopRow(AddCity: ShopData[1]) 18 } 19 .previewLayout(.fixed(width: 300, height: 70)) 20 } 21 }
補足情報(FW/ツールのバージョンなど)
Xcode Version 11.3.1 (11C504)
macOS Catalina 10.15.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/11 16:55
2020/02/11 16:58
2020/02/11 17:47
2020/02/11 17:58
2020/02/11 18:13