私は今、地図にマーカーを表示するWEBアプリケーションを開発中です。
マーカーの元となる座標データは管理画面で入力し、
次のような形でJSONファイルに出力されます。
{ "markers": [ { "id": "540", "lat": "35.6804", "lng": "139.769017", "name": "東京", }, { "id": "541", "lat": "34.693725", "lng": "135.502254", "name": "大阪", }, ], };
座標データの出力は、以下のEJSテンプレートで作成しています。
<% var tmpData = new Object(); tmpData.itemlist = items.map(item => { var itemData = new Object(); itemData = { "id": item.data.id, "lat": item.data.latitude, "lng": item.data.longitude, "name": item.data.name, }; return itemData; }); %> <%- JSON.stringify(tmpData) %>
管理画面で入力した座標一覧が変数 items
に格納され、
それを加工してJSON出力するという具合です。
今回の質問内容は、JSONデータを変数として読み込ませ、
別のJSONオブジェクトにマージする方法についてです。
この管理画面とは別に、次のような過去データがJSONファイルとして存在しています。
{ "markers": [ { "id": "1", "lat": "34.690081", "lng": "135.195631", "name": "神戸", }, { "id": "2", "lat": "38.268195", "lng": "140.869418", "name": "仙台", }, ... (中略) ... { "id": "538", "lat": "26.212576", "lng": "127.679021", "name": "那覇", }, { "id": "539", "lat": "35.181451", "lng": "136.906557", "name": "名古屋", }, ], };
管理画面は別会社が制作したもので、過去データをインポートする方法がないため、
EJSテンプレート側でJSONをマージして、出力したいです。
次のような形でJSON出力されることが理想です。
{ "markers": [ { "id": "1", "lat": "34.690081", "lng": "135.195631", "name": "神戸", }, { "id": "2", "lat": "38.268195", "lng": "140.869418", "name": "仙台", }, ... (中略) ... { "id": "538", "lat": "26.212576", "lng": "127.679021", "name": "那覇", }, { "id": "539", "lat": "35.181451", "lng": "136.906557", "name": "名古屋", }, { "id": "540", "lat": "35.6804", "lng": "139.769017", "name": "東京", }, { "id": "541", "lat": "34.693725", "lng": "135.502254", "name": "大阪", }, ], };
これを実現するため、次のようなコードを書いてみましたが動作しませんでした。
<% var oldData = include('./archive.json.ejs'); var tmpData = new Object(); tmpData.itemlist = items.map(item => { var itemData = new Object(); itemData = { "id": item.data.id, "lat": item.data.latitude, "lng": item.data.longitude, "name": item.data.name, }; return itemData; }); var mergedData = Object.assign(oldData, tmpData); %> <%- JSON.stringify(mergedData) %>
どのようにすれば、EJSでJSONファイルを変数として読み込むことができるでしょうか?
皆様どうかアドバイスをください。よろしくお願いいたします。
追記
includeを使用しなければ次のような書き方で期待したJSONデータが出力されました。
<% var oldData = { "markers": [ { "id": "1", "lat": "34.690081", "lng": "135.195631", "name": "神戸", }, { "id": "2", "lat": "38.268195", "lng": "140.869418", "name": "仙台", }, ... (中略) ... { "id": "538", "lat": "26.212576", "lng": "127.679021", "name": "那覇", }, { "id": "539", "lat": "35.181451", "lng": "136.906557", "name": "名古屋", }, ], }; var tmpData = new Object(); tmpData.itemlist = items.map(item => { var itemData = new Object(); itemData = { "id": item.data.id, "lat": item.data.latitude, "lng": item.data.longitude, "name": item.data.name, }; return itemData; }); var mergedData = new Object(); mergedData.markers = oldData.markers; // object push for(var i = 0; i < tmpData.itemlist.length; i++){ mergedData.markers.push(tmpData.itemlist[i]); } %> <%- JSON.stringify(mergedData) %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。