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

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

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

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

JavaScript

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

jQuery

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

HTML

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

Q&A

解決済

1回答

1194閲覧

javascriptでJSONファイルから値を呼び出す記述

zen2

総合スコア6

JSON

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

JavaScript

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

jQuery

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

HTML

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

0グッド

1クリップ

投稿2020/06/02 11:19

編集2020/06/02 13:49

javascriptの初歩的なことでお恥ずかしいです。

例えばプロフィールページを作るときに
人数分の名前や特技等の数値はJSONファイルに格納してあって、
その数値を呼び出して一人分のプロフィールページを作りたいとします。

htmlで名前とか特技の部分を穴あきにしたコードを書き、
JSONファイルから持ってきた数値で穴を埋めてプロフィールページを表示させたいです。

その場合、javascript部分の記述はどのように書けばスマート(もしくは簡単)でしょうか。

プロフィールページは人数分作ることを前提にしてるのでひな形として使いやすいのが望ましいです。(htmlの生成自体は手動、つまりコピペで人数分作る感じを想定してます。)

未熟さが伝わることかと思いますが回答は初心者向けを意識せずにご自分の言葉で書いてもらって構いません。

(追記)

<body> <div id="display"> <div id="base" class="main-wrapper" style="display:none"> <h2> <span class="name"></span> さん </h2>     <a class="personalUrl" href=""> <img class="imgUrl" src="" alt="自画像"> </a> </div> </div> <script type="application/javascript"> var controller = new controller(); controller.post("(jsonのurl)", {}, function (data) { var i = 0; var list = $("#base").clone(); list.find(".name").text(data[i].name); list.find(".imgUrl").attr("src", data[i].imgUrl); list.find(".personalUrl").attr("href", data[i].personalUrl); list.show(); $("#display").append(list); }); </script> </body>

例えばこんなんで出力として

〇〇さん
(リンク付きの自画像)

みたいに一応成功します。

元はループ処理で「1ページに色んな人の情報をリスト表示するページ」に使われてた関数をいじって作ったので、あまりスマートじゃない気がします。

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

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

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

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

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

miyabi_takatsuk

2020/06/02 11:54

さすがに、HTMLと、JSON取得の部分のJavaScript構文はありますよね? せめて、それだけでも質問本文に記載しましょう。 でないと丸投げ質問になっちゃいます。
hoshi-takanori

2020/06/02 13:30

いい発想だと思います。たぶん、詳しい人はサーバー側でテンプレートを埋めてとか、クライアント側で React や Vue.js などを使うという発想になると思いますが、初心者ならなるべくシンプルに生の JS か jQuery で地道に実装するのがいいんじゃないでしょうか。
m.ts10806

2020/06/02 13:36 編集

>javascriptの初歩的なことでお恥ずかしいです。 質問書く前にこう書かれても困りますね。 この何十文字かを書く労力を質問要件の充実にあててください。 質問には「初心者アイコン」がつけられるので、そこでとどめてください。 ※自己紹介や要件に関係ない但し書きなど、ノイズに感じる人も少なくないです 質問は恥でも何でもなく、問題解決のためのコミュニケーション手段です。 質問サイトで、サイトの主旨に沿った質問であれば質問内容のレベルは関係ないと思います。(逆に卑下され過ぎると答えづらい。初歩的だと自己評価できるならなぜ質問するの?など疑問もある)
guest

回答1

0

ベストアンサー

こんにちは。
一案を挙げておきます。

  • テンプレートになる divを、DOMの中に display:none で持っておくのではなく、HTMLの文字列として持っておきます。

  • その際に、名前やURLを後から埋め込めるように、テンプレート文字列 を使った関数にしておきます。

具体例は以下です。

JSONが以下のようなものであるとします。

json

1{ 2 "name": "山田太郎", 3 "imgUrl": "https://dummyimage.com/100x100/1e00ff/fff.png&text=TY", 4 "personalUrl": "https://example.com/persons/1" 5}

上記に対応して、以下のように、テンプレート文字列の該当箇所を、引数の各変数で置き換えたHTMLを返す関数を作っておきます。

javascript

1 const personHTML = ({ name, imgUrl, personalUrl }) => 2 `<div class="main-wrapper"> 3 <h2> 4 <span class="name">${name}</span> 5 さん 6 </h2> 7    <a class="personalUrl" href="${personalUrl}"> 8 <img class="imgUrl" src="${imgUrl}" alt="自画像"> 9 </a> 10 </div>`;

上記を使えば、#displayへの追加は以下のようにできます。

javascript

1$.getJSON(url).then(data => { 2 $('#display').append(personHTML(data)); 3 })

以下は、上記の動作確認用のサンプルです。

(※上記のサンプルで使っているmockableのエンドポイントは、このご質問の解決後、削除します。ご了承ください)

以上、参考になれば幸いです。

追記

以下のような関数(の入っている変数)addPerson

javascript

1 const addPerson = ({ name, imgUrl, personalUrl }) => { 2 $('#display').append( 3 `<div class="main-wrapper"> 4 <h2> 5 <span class="name">${name}</span> 6 さん 7 </h2> 8    <a class="personalUrl" href="${personalUrl}"> 9 <img class="imgUrl" src="${imgUrl}" alt="自画像"> 10 </a> 11 </div>`); 12 };

を作っておくと、$.getJSON の成功時は、以下のようにさらに手短に書けます。

javascript

1$.getJSON(url).then(addPerson);

投稿2020/06/02 15:24

編集2020/06/02 23:56
jun68ykt

総合スコア9058

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

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

zen2

2020/06/04 08:11

参考になりました。ありがとうございました。
jun68ykt

2020/06/04 08:21

どういたしまして???? > 参考になりました。 とのことでよかったです????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問