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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

0回答

836閲覧

JSONをjQuery取得で存在しないデータが取得されている

Ny4g4t0n

総合スコア0

JSON

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/08/08 05:54

編集2021/08/08 07:41

前提・実現したいこと

JSONをjQuery取得しようとしたら不明なデータが挿入されてundefinedが出力されてしまいます。
2次元配列を作成してるので、forで2回ループで取得してます。
JSONバリデートした所、特に問題はなかったので、ループ側でなにか問題が発生してるかと思ってるんですが、
consoleにも何も表示されないので良くわからず困ってます。
いつも使っているソースを流用したので、他ではちゃんと取得できてます。

なにか問題があればご教授いただきたいです…よろしくお願いします。

該当のソースコード

jQuery

1$(function () { 2for (var i in data) { 3 var itemList = 4 '<div id="' + data[i].id + '" class="item-block is-hide">' + 5 '<h3 class="list-name">' + data[i].number + '</h3>' + 6 '<ul>'; 7 for (var le in data[i].items) { 8 itemList += 9 '<li class="item-name">' + 10 '<a class="' + data[i].items[le].active + '" onclick="specialGA(' + data[i].items[le].ga + ')" href="' + data[i].items[le].link + '">' + data[i].items[le].name + '<span> ' + data[i].items[le].price + '</span>' + '</a>' + 11 '</li>'; 12 } 13 itemList += 14 '</ul>' + 15 '</div>'; 16 $('.modal-block').append(itemList); 17 } 18});

JSON

1[ 2 { 3 "id": "modal-01", 4 "number": "number 01", 5 "items": [ 6 { 7 "active": "active", 8 "ga": "'123456'", 9 "link": "#test", 10 "name": "name1", 11 "price": "¥13,200 (tax)" 12 }, 13 { 14 "active": "no-active", 15 "ga": "'123456'", 16 "link": "#test", 17 "name": "name2", 18 "price": "¥16,500 (tax)" 19 }, 20 { 21 "active": "active", 22 "ga": "'123456'", 23 "link": "#test", 24 "name": "name3", 25 "price": "¥16,500 (tax)" 26 } 27 ] 28 } 29]

試したこと

console.log(data[i].items[le])を出力してみると
ちゃんと数分取得されていましたが、出力するとitemsにundefinedが挿入されます。

###不明なHTML
どんな風に出力されているか画像キャプチャーしました↓
イメージ説明

##HTML出力
他のHTMLはしっかり書き出されてます。すみませんリンク先は会社バレちゃうので消してます
イメージ説明

##Console出力
console.log(data[i]);を出力してみました
イメージ説明

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

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

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

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

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

webgoto

2021/08/08 06:19 編集

正しく動作しているように思いますが、どのようにすると、どの部分にundefinedが表示されるのでしょうか?
Ny4g4t0n

2021/08/08 06:40

追記しましたが、添付画像のように最後のリスト部分に何故か追加されてしまいます。
webgoto

2021/08/08 06:48 編集

2度目のforの前にconsole.logを追加してデータの内容を見れば解決につながるかもしれません。 console.log(data[i]);//追加 for (var le in data[i].items) { また、その前の1~3のitem-nameは正しくhtmlがひょうじされているのでしょうか?
m.ts10806

2021/08/08 07:24

コードこれだけだと誰も再現できないのですけど、 dataをconsole.log()で出力した結果も提示してください。
Ny4g4t0n

2021/08/08 07:45

わかりづらくて申し訳ありません…。イメージ的にはモーダルをJSONとjQueryで書きだしてます。 追記しましたのでご確認ください。
webgoto

2021/08/08 07:55

追記ありがとうございます。 記載されているJSONのコードをdataとして使用した場合はundefindeにはなりません。どのようにJSONデータを作成し読み込んでいるのかわかりませんが、おそらくJSON作成時点でundefindになるitem(おそらく配列)が追加されているように思います。
Ny4g4t0n

2021/08/08 08:33

確かにここに書いてあるdataだとなりませんね…。 記載しているJSONは簡略化されてあって、配列が9個連なってる状態になってます。
m.ts10806

2021/08/08 09:00

あまり自身の判断で削ってしまうと問題が再現できないので何度手間にもなってしまいます。ご注意を。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問