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

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

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

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

2523閲覧

The data couldn’t be read because it isn’t in the correct format.について

pepper0

総合スコア20

JSON

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/02/08 09:47

編集2019/02/12 07:09

URLSessionでJSON形式のデータを受信しようとしたのですが,
The data couldn’t be read because it isn’t in the correct format.
というエラーが出てしまい修正できないでいます。
データのフォーマットの形式が違うため読み込みすることができないらしいのですが、修正点が見つけられないでいます。
どなたかご教授お願いいたします。
ATSはinfo.plistから無効にしています。

Swift

1import UIKit 2import Foundation 3 4class ViewController: UIViewController { 5 6 struct FAQ: Codable { 7 var path: [String] 8 var type: [String] 9 var question: [String] 10 var choices: [String] 11 } 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 16 let urlSessionGetClient = URLSessionGetClient() 17 let queryItems = [URLQueryItem(name: "choice", value: "/")] 18 urlSessionGetClient.get(url: "http://172.17.240.25:8080/ta2/bot/select", queryItems: queryItems) 19 20 } 21 22 override func didReceiveMemoryWarning() { 23 super.didReceiveMemoryWarning() 24 25 } 26 27 class URLSessionGetClient { 28 29 func get(url urlString: String, queryItems: [URLQueryItem]? = nil) { 30 var compnents = URLComponents(string: urlString) 31 compnents?.queryItems = queryItems 32 let url = compnents?.url 33 let semaphore = DispatchSemaphore(value: 0) 34 let task = URLSession.shared.dataTask(with: url!) { 35 data, response, error in 36 if let jsonString = data { 37 let decoder: JSONDecoder = JSONDecoder() 38 do { 39 let faq: FAQ = try decoder.decode(FAQ.self, from: jsonString) 40 print(faq) 41 } catch { 42 print("error:", error.localizedDescription) 43 } 44 45 } else { 46 print(error ?? "Error") 47 } 48 semaphore.signal() 49 } 50 task.resume() 51 _ = semaphore.wait(timeout: DispatchTime.distantFuture) 52 } 53 } 54}

修正

JSONデータを消去しました。

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

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

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

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

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

fuzzball

2019/02/12 06:56

「ヘディングのテキスト」ってなんですか?
fuzzball

2019/02/12 06:59

質問に書いてあるJSONは、実際に受け取ったJSONなのでしょうか?それとも受信が出来ないという質問なのでしょうか?
pepper0

2019/02/12 07:08

ヘディングのテキストは修正時に誤って入力してしまったものなので関係ありませんでした。 また、このコードではjsonを受信するだけの予定でしたので、記述されたJSONは関係ありませんでした。 受信がうまくいかないということで質問しました。
fuzzball

2019/02/12 07:09

エラーはどこで出ているのでしょうか?
pepper0

2019/02/12 07:23

ビルドは成功するのですが、デバックエリアにて error:The data couldn’t be read because it isn’t in the correct format. と表示されています
fuzzball

2019/02/12 07:42

if let jsonString = data { の下に、 jsonString.enumerated().forEach {print(String(format: "%02x", $0.1), terminator: $0.0 % 16 == 15 ? "\n" : " ")} を追加して、出力を教えてください。 あと、エラーがどのタイミングで出ているか分かりますか?
pepper0

2019/02/12 08:30

追加して出力した結果 7b 22 70 61 74 68 22 3a 22 2f 22 2c 22 74 79 70 65 22 3a 22 73 65 6c 65 63 74 22 2c 22 71 75 65 73 74 69 6f 6e 22 3a 22 e3 81 94 e8 b3 aa e5 95 8f e3 81 ae e8 a8 80 e8 aa 9e e3 81 af e4 bd 95 e3 81 a7 e3 81 97 e3 82 87 e3 81 86 e3 81 8b 3f 22 2c 22 63 68 6f 69 63 65 73 22 3a 5b 22 4a 61 76 61 22 2c 22 4a 53 50 22 2c 22 48 54 4d 4c 22 2c 22 43 22 5d 7d error: The data couldn’t be read because it isn’t in the correct format. と出ました。
pepper0

2019/02/12 08:31

また、エラーのタイミングはシミュレーターが立ち上がり白い画面が出た後しばらくしてから出力されました。
fuzzball

2019/02/12 09:03

受信は正しく出来ているようですが、 >>受信がうまくいかないということで質問しました というのはどういうことでしょうか?
fuzzball

2019/02/12 09:15

というか、エラーって print("error:", error.localizedDescription) ここで出ているんじゃないんですか?
guest

回答2

0

ベストアンサー

現在のJSONが正解なのであれば、

swift

1struct FAQ: Codable { 2 var path: String //※修正 3 var type: String //※修正 4 var question: String //※修正 5 var choices: [String] 6}

です。

FAQの定義が正しいのであれば、JSONが間違ってます。

投稿2019/02/12 09:27

fuzzball

総合スコア16731

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

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

pepper0

2019/02/13 07:04

出力されました。ご丁寧に教えて頂き有難うござました。
guest

0

JSONの各要素がコンマ区切りになってないです。
チェックツールはいくらでもありますので、ちゃんと確認しましょう

JSON

1{ 2 "path" : [""], 3 "type" : [""], 4 "question" : ["ご質問の言語は何でしょうか?"], 5 "choices" : ["Java","JSP","HTML","C"] 6}

投稿2019/02/09 04:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

pepper0

2019/02/12 06:51

修正箇所を教えていただき有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問