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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1518閲覧

JSONから都道府県の座標を取得して配列オブジェクトに格納したい。

atk_3

総合スコア43

JSON

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/04/02 18:54

JSONから都道府県の座標を取得して配列オブジェクトに格納したいと思っております。

javascript

1$.getJSON("/map/assets/json/map.json", (list) => { 2 // console.log(list) 3 let mapPosition = []; 4 for (var i = 0; i < list.marker.length; i++) { 5 var lat = list.marker[i].lat; 6 var lng = list.marker[i].lng; 7 8 mapPosition = [{ lat: lat, lng: lng }]; 9 //console.log(mapPosition) 10 }

JSON

1{ 2 "marker": [ 3 { 4 "pref": "北海道", 5 "url": "http://www.pref.hokkaido.lg.jp/", 6 "addr": "北海道札幌市中央区北3条西6丁目", 7 "lat": 43.064301, 8 "lng": 141.346874 9 }, 10 { 11 "pref": "青森県", 12 "url": "http://www.pref.aomori.lg.jp/", 13 "addr": "青森県青森市長島一丁目1-1", 14 "lat": 40.824622, 15 "lng": 140.740598 16 }, 17 { 18 "pref": "岩手県", 19 "url": "http://www.pref.iwate.jp/", 20 "addr": "岩手県盛岡市内丸10番1号", 21 "lat": 39.7036, 22 "lng": 141.152709 23 } 24 ] 25} 26※一部割愛

上記条件でmapPositionに配列オブジェクトとして座標の値を取得したいのですが、うまくできずにおります。

実現したい形としては

javascript

1const mapPosition = [ 2 { lat: 35.6849051, lng: 139.7270029 }, 3 { lat: 34.7024854, lng: 135.4937566 }, 4 { lat: 33.5885861, lng: 130.3772019 }, 5 { lat: 43.0686606, lng: 141.3485613 }, 6 ];

上記のような形で格納し後にmapPositionのindexを指定して処理を続けたいとおもっておりました。

しかし、現在のコードでの実行結果では

javascript

1const mapPosition = [ 2 { lat: 35.6849051, lng: 139.7270029 }, 3 ]; 4const mapPosition = [ 5 { lat: 34.7024854, lng: 135.4937566 }, 6 ]; 7const mapPosition = [ 8 { lat: 33.5885861, lng: 130.3772019 }, 9 ]; 10console.log()の結果を置き換えております

lengthの回数分配列オブジェクトが生成されてしまいます。

for文の中で宣言しているからではと思い

javascript

1 $.getJSON("/partners/map/assets/json/test.json", (list) => { 2 // console.log(list) 3 for (var i = 0; i < list.marker.length; i++) { 4 var lat = list.marker[i].lat; 5 var lng = list.marker[i].lng; 6 } 7 let mapPosition = []; 8 mapPosition = [{ lat: lat, lng: lng }]; 9 console.log(mapPosition) 10 });

for文の外での宣言も試してみましたが

javascript

1const mapPosition = [ 2 { lat: 26.212418, lng: 127.680895 }, 3 ]; 4console.log()の結果を置き換えております

存在しない座標の取得、lengthも0となっており自力で解決ができませんでした。

解決策お分かりになる方がいましたら回答お待ちしております。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ループの中で毎回 mapPosition に新しい配列を入れるのではなく、push を使って追加すれば良いのでは。
また、オブジェクトのプロパティ名と変数名が同じ場合は { lat, lng } のように短縮構文を使えます。

diff

1 $.getJSON("/map/assets/json/map.json", (list) => { 2 // console.log(list) 3 let mapPosition = []; 4 for (var i = 0; i < list.marker.length; i++) { 5 var lat = list.marker[i].lat; 6 var lng = list.marker[i].lng; 7 8- mapPosition = [{ lat: lat, lng: lng }]; 9+ mapPosition.push({ lat, lng }); 10 //console.log(mapPosition) 11 } 12+ console.log(mapPosition); 13 });

さらに、配列の map引数の分割代入を使えば、もっと短く書けます。

js

1 $.getJSON("/map/assets/json/map.json", (list) => { 2 let mapPosition = list.marker.map(({ lat, lng }) => ({ lat, lng })); 3 console.log(mapPosition); 4 });

投稿2021/04/02 20:32

hoshi-takanori

総合スコア7901

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

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

atk_3

2021/04/04 07:16

ありがとうございます! 無事、実現できました。 参考リンクなどもいただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問