#実現したいこと
JSONにて返ってくる値を次のような出力形式にしたいです。
地方: 東北 現在の表示中の都道府県: 宮城(2件) 秋田(1件) 名物: 牛タン 名物: 気仙沼ホルモン 名物: きりたんぽ 地方: 関東 現在の表示中の都道府県: 東京(1件) 埼玉(2件) 名物: 東京ばなな 名物: 草加せんべい 名物: さつまいも料理
JSONはこちらです。
JSON
1[ 2 { 3 "region": "東北", 4 "detail": [ 5 { 6 "pref": "宮城", 7 "product": "牛タン" 8 }, 9 { 10 "pref": "宮城", 11 "product": "気仙沼ホルモン" 12 }, 13 { 14 "pref": "秋田", 15 "product": "きりたんぽ" 16 } 17 ] 18 }, 19 { 20 "region": "関東", 21 "detail": [ 22 { 23 "pref": "東京", 24 "product": "東京ばなな" 25 }, 26 { 27 "pref": "埼玉", 28 "product": "草加せんべい" 29 }, 30 { 31 "pref": "埼玉", 32 "product": "さつまいも料理" 33 } 34 ] 35 } 36]
#発生しているエラー
Uncaught TypeError: Cannot convert undefined or null to object
#ソースコード
特定のkeyにある件数を取得するために、Object.keys().lengthなども使いましたが、うまくいかなったです。
ソースよりもJSONの形式を直した方が効率が良い等、、アドバイスや解決策等をご教授いただけたら幸いです。
上記出力形式にある「(●件)」というのは配列の中にある特定ワードの件数を自動で取得するようにしたいです。
「現在表示中の都道府県: 」のところは重複を除去したうえでdetail内にあるものをすべて表示したいと思っています。
javascript
1 const jsonUrl = "json_url"; 2 function getData(jsonPath = '') { 3 return $.ajax({ 4 type: 'GET', 5 url: jsonPath, 6 cache: false, 7 }) 8 } 9 function shopLoop(jsondata = '') { 10 var h = ''; 11 for(var i in jsondata){ 12 13 h += '<h3>地方:' + jsondata[i].region + '</h3>'; 14 h += '<div>'; 15 h += '<div>'; 16 for(var j in jsondata[i].detail){ 17 18 if ( jsondata[i].detail[j].pref !== -1 ) { 19 h += '<p>現在表示中の都道府県: ' + jsondata[i].detail[j].pref + '(' + Object.keys( jsondata[i].detail[j].pref ).length + '件)' + '</p>'; 20 } 21 h += '<div><ul>'; 22 h += '<li>名物:' + jsondata[i].detail[j].shop_name + '</li>'; 23 h += '</ul>'; 24 h += '</div>'; 25 } 26 h += '</div>'; 27 h += '</div>'; 28 } 29 $('#hoge').html(h); 30 } 31 32 33 getData(jsonUrl).then( function(data) { 34 shopLoop(data); 35 }); 36
回答2件
あなたの回答
tips
プレビュー