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

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

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

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

Swift

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

Q&A

解決済

1回答

229閲覧

SwiftyJSONで座標値だけ抜き出す

bbb04

総合スコア18

JSON

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

Swift

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

0グッド

0クリップ

投稿2017/10/28 07:49

編集2017/10/28 08:54

下記はGoogleDirectionsAPIを叩いて2点間のルート情報を取得した結果です。
SwiftyJSONを使ってここから座標情報だけ抜き出して配列に入れていきたいと考えています。しかし、色々調べて見たのですがJSONパースの考え方がいまいちよく掴めません。例えばこの中から、northeast,southeast,startlocationを取るのはどうすれば良いのでしょうか。丸投げのような形になるのですがご教授願います。

"routes" : [ { "bounds" : { "northeast" : { "lat" : 35.413728999999996, "lng" : 133.71918969999999 }, "southwest" : { "lat" : 35.4033862, "lng" : 133.71453629999999 } }, "summary" : "~~", "waypoint_order" : [ ], "legs" : [ { "start_location" : { "lat" : 35.4033862, "lng" : 133.71492269999999 }, "distance" : { "value" : 1582, "text" : "1.6 km" }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Swift

1 if let lat: JSON = json["legs"]["start_location"][0]{ 2 print("経度",lat) 3 4 }

start_locationの経度を出そうとしたのですがnullが戻ってきます。
階層構造の考え方を間違っているのでしょうか

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

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

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

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

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

t_obara

2017/10/28 08:16

Googleで検索すると多くのWebサイトが見つかると思うのですが、それらを参照して試して見ましたか?その上で、出てきた問題や躓いた点をお聞きした方が回答が得られやすいと思いますよ。
bbb04

2017/10/28 08:58

ご指摘ありがとうございます。試したことを追記させて頂きましたので見ていただければと思います。
guest

回答1

0

ベストアンサー

SwiftyJSONを使うのであればあなたがパースを行う必要はありません。
パースはSwiftyJSONが行います。

投稿2017/10/28 08:15

MasakiHori

総合スコア3384

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

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

bbb04

2017/10/28 09:06

APIを叩いた結果の戻り値dataを使ってlet json = JSON(data: data!)としてjsonを定義したとして値を取り出す処理としては[]の階層構造を合わせるだけで良いのでしょうか。
MasakiHori

2017/10/28 11:35

最後は0ではなく"lat"または"lng"です Doubleを取り出すのであれば .double が必要です。
bbb04

2017/10/28 11:35

ありがとうございます。 修正しましたが未だnullが返ってきています。 Non-optional expression of type 'JSON' used in a check for optionalsの注意がでていますがこれは関係あるのでしょうか
bbb04

2017/10/28 13:09

if let lat = json["routes"]["legs"]["start_location"]["lat"].double{ print("経路",lat) } に変更しました。注意は消えたのですがまだelseに行ってしまいます。何度もすみません
MasakiHori

2017/10/28 13:17

よく見ると間に配列が入ってますね json["routes"][0]["legs"][0]["start_location"]["lat"].double こうかな?
bbb04

2017/10/29 01:56

値でました。おかげさまで配列と辞書の違いも理解できました。これで座標値の配列が作れますありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問