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

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回答

1474閲覧

JAYSONを使ったJSONのパース

Kenelaoy

総合スコア50

JSON

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/04/28 07:38

下記のようなコードで、JAYSONを使ったパースを行おうとしました

Swift

1 if let json_path:String = Bundle.main.path(forResource: "Meibo", ofType: "json") { 2 //パスを取得できたら… JSONデータを文字列で取得 3 let json_data = try! NSString(contentsOfFile: json_path, encoding: String.Encoding.utf8.rawValue) as! String 4 5 let jsondata = NSData(contentsOfFile: json_path) 6 let jsonArray = try? JSONSerialization.jsonObject(with: jsondata! as Data, options: .mutableContainers) as! NSDictionary 7 8 let json = JAYSON(json_data) 9 print(json) 10 11 let urlString: JAYSON = json["Hiend_Class"]["1"]["name"] 12 print(urlString) 13 }

JSONファイルはこのようになっています

Json

1{ 2 "Hiend_Many":1 3 "Hiend_Class": { 4 "1":{"id" : 1,"name" : "user","Hurigana":"ゆーざー"}, 5 "2":{"id" : 2,"name" : "test","Hurigana":"てすと"}, 6 "3":{"id" : 3,"name" : "admin","Hurigana":"あどみん"}, 7 "4":{"id" : 4,"name" : "master","Hurigana":"ますたー"}, 8 //中略 9 "35":{"id" : 35,"name" : "Empty","Hurigana":"予約領域"}, 10 "36":{"id" : 36,"name" : "Empty","Hurigana":"予約領域"}, 11 "37":{"id" : 37,"name" : "Empty","Hurigana":"予約領域"}, 12 "38":{"id" : 38,"name" : "Empty","Hurigana":"予約領域"}, 13 "39":{"id" : 39,"name" : "Empty","Hurigana":"予約領域"}, 14 "40":{"id" : 40,"name" : "Empty","Hurigana":"予約領域"} 15 } 16}

Swift内の"json"は問題なく読み込めているようで、Jsonファイルの全文がprintされています
ただ、"Hiend_Class"内の"1"にある"name"を取得しようとしてもnullになってしまいます
実際、JAYSONの使い方もよく分かってはいないのですが、どのようにすれば読めるようになるのでしょうか

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

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

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

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

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

guest

回答2

0

自己解決

Swift

1func loadJson(fileName : String) -> JSON? { //JSONパース 2 let path = Bundle.main.path(forResource: fileName, ofType: "json") //JSONのパスを取得 3 print(path) 4 do{ 5 //https://www.hackingwithswift.com/example-code/strings/how-to-load-a-string-from-a-file-in-your-bundle 6 let jsonStr = try String(contentsOfFile: path!) //JSONを一度平文に変換 7 //print(jsonStr) 8 let json = JSON.parse(jsonStr) //SwiftyJSONでパース 9 //print(json) 10 return json //戻り値としてパース済みのJSONを返す 11 } catch{ 12 return nil 13 } 14 }

これで解決しました
一度String型にしてからパーサに渡す処理が必要だったのでしょうか・・・
SwiftyJSON自体は、柔軟な使い方ができそうですが、自分は少なくともこれで成功していますからこれで今後もやっていこうと思います

追記:JAYSONではなく、情報の多いSwiftyJSONに変えて試行しました

投稿2017/05/07 17:12

編集2017/05/07 17:20
Kenelaoy

総合スコア50

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

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

0

Hiend_ManyHiend_Classの間に,が抜けています。
構文エラーではないでしょうか。

投稿2017/05/02 07:16

oden

総合スコア76

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

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

Kenelaoy

2017/05/02 08:17

ありがとうございます カンマを追加してみたのですが、やはりまだnullのままでした・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問