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

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

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

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

JavaScript

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

Q&A

解決済

1回答

1622閲覧

JSONデータからJavaScriptを用いてHTMLを生成したいです

alpaca540

総合スコア18

JSON

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

JavaScript

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

0グッド

0クリップ

投稿2019/07/17 05:56

編集2019/07/17 06:06

前提・実現したいこと

JSONデータからJavaScriptを用いてHTMLを生成したく、
途中までは生成できたのですが、下記を実現する方法がわかりません。
ご教示いただければありがたいです。よろしくお願いいたします。

(1)<div class="guest"></div>を生成するためには、どのようなjavascriptのコードを追記すれば良いのでしょうか。

(2)どのようにhtmlが生成できているか確認する方法などあるのでしょうか?
(例えばconsoleなどで…。
現状のjavascriptのコードでどのようなhtmlが生成できているかわかると、何が足りないかわかりやすい・・と思いまして。
見当違いの質問でしたら申し訳ありません)

このようなhtmlを生成したいです

html

1<div id="container"> 2 3<!-- ◎部屋:桜 --> 4 <div class="roomname" id="sakura"><h2>SAKURA</h2></div> 5 6 <div class="guest"> 7 8 <section> 9 <a href="image/cake/ba_180616_2.jpg" data-lightbox="sakura"> 10 <img src="image/cake/ba_180616_2.jpg"></a> 11 </section> 12 13 <section> 14 <a href="image/cake/ba_180616.jpg" data-lightbox="sakura"> 15 <img src="image/cake/ba_180616.jpg"></a> 16 </section> 17 18 </div><!-- guest --> 19 20<!-- ◎部屋:梅 --> 21 <div class="roomname" id="ume"><h2>UME</h2></div> 22 23 <div class="guest"> 24 25 <section> 26 <a href="image/cake/pa_180513.jpg" data-lightbox="ume"> 27 <img src="image/cake/pa_180513.jpg"></a> 28 </section> 29 30 <section> 31 <a href="image/cake/pa_180722.jpg" data-lightbox="ume"> 32 <img src="image/cake/pa_180722.jpg"></a> 33 </section> 34 35 </div><!-- guest --> 36 37</div><!-- container -->

現状のjsonデータ(cake.json)とjavascript

json

1[{ 2 "room":{ "name": "SAKURA", "id":"sakura"}, 3 "item": [ 4 {"url": "image/cake/ba_180616_2.jpg"}, 5 {"url": "image/cake/ba_180616.jpg"} 6 ] 7}, 8{ 9 "room":{ "name": "UME", "id":"ume"}, 10 "item": [ 11 { "url": "image/cake/pa_180513.jpg"}, 12 { "url": "image/cake/pa_180722.jpg"} 13 ] 14}]

javascript

1$(function(){ 2 $.getJSON('cake.json', function(data){ 3 for(var i in data){ 4 $('#container').append( 5 '<div class="roomname" id=' + data[i].room.name + 6 '><h2>' + data[i].room.id + 7 '</h2>'); 8 for(var j in data[i].item){ 9 $('#container').append( 10 '<section><a href=' + data[i].item[j].url + 11 'data-lightbox=' + data[i].room.id + 12 '><img src=' + data[i].item[j].url + 13 '></a></section>'); 14 } 15 } 16 }); 17});

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

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

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

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

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

m.ts10806

2019/07/17 06:00

できれば日本語はちゃんとしていただきたく。 「JSONデータからJavaScriptを用いてHTMLを生成する」ですよね?
tacsheaven

2019/07/17 06:03

このデータからだと guest は1ルームにつき一つでよいのか複数になるのかすら分かりませんね(複数の場合の例がないため)
alpaca540

2019/07/17 06:08

mts10806様 ありがとうございます。修正させていただきました。
alpaca540

2019/07/17 06:09

tacsheaven様 失礼しました。guestは1ルームにつき1つです。よろしくお願いいたします。
m.ts10806

2019/07/17 06:13 編集

>guestは1ルームにつき1つです それって固定で<div class="guest">で囲えばいい話ではないですか?
alpaca540

2019/07/17 06:38

mts10806様 <div class="guest">にCSSを設定しておりまして、1ルームに1つの方法しか思いつかなかったのです。 勉強不足ですみません。
guest

回答1

0

ベストアンサー

ちょっと雑ですがモダンブラウザならこれでいけます

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 fetch('cake.json').then(data=>data.json()).then(data=>{ 4 var html=""; 5 data.forEach(x=>{ 6 html+=`<div class="roomname" id="${x.room.name}"><h2>${x.room.id}</h2></div>`; 7 html+=`<div class="guest">`; 8 x.item.forEach(y=>{ 9 html+=`<section><a href="${y.url}" data-lightbox="${x.room.id}"><img src="${y.url}"></a></section>\n`; 10 }); 11 html+=`</div>`; 12 }); 13 document.querySelector('#container').innerHTML=html; 14 }); 15}); 16</script> 17<div id="container"></div>

投稿2019/07/17 06:14

編集2019/07/17 06:17
yambejp

総合スコア114843

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

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

alpaca540

2019/07/17 06:39

yambejp様 ありがとうございました!! 希望のhtmlを生成できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問