質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

解決済

1回答

1775閲覧

SwiftUIにおけるJSONファイル読み込みに関するエラー 【Invalid value around character 0】

gicchan12

総合スコア9

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

0グッド

1クリップ

投稿2020/02/11 13:32

編集2020/02/11 17:49

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

JSON の形式が間違っていそうです
.json ファイルであれば var json は不要 / JavaScript ではなく json のみしか書けないので

[ { "name": "とりひで", "id": 1001 }, { "name": "とりひで2", "id": 1002 } ]

投稿2020/02/11 14:51

編集2020/02/11 17:59
unhappychoice

総合スコア1531

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gicchan12

2020/02/11 16:55

ご回答頂き本当にありがとうございます。感謝致します。 プログラミング初心者であり、知識が浅すぎる為、なにが足りないのかが分からない状況であります。 お手数ですが、具体的に教えて頂けませんでしょうか。
unhappychoice

2020/02/11 16:58

単に間違い探しするつもりでよく見比べてくださいとしか言いようがないのですが...
gicchan12

2020/02/11 17:47

すいません。 ここはコメントを削除した際に消してしまったものです、、、、 これを付け足しても同様のエラーが出ます。
unhappychoice

2020/02/11 17:58

回答修正しました、いかがでしょうかmm
gicchan12

2020/02/11 18:13

解決致しました! 本当に本当にありがとうございます!!! 勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問