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

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オブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1170閲覧

取得した外部JSONから特定の値を取り出し、想定通りの表示にしたい

southern_flavor

総合スコア70

JSON

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

JavaScript

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

jQuery

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/05/01 14:16

#わからないこと・仕様の流れ
1.ボタンをクリックする

2.WebAPIとして多次元配列のJSONデータをajaxにて取得する

3.その中で特定の値を絞り込む
ここでは「りんご」とします。

4.その値に合致したものをHTMLにて表示する
ここのフローで希望する表示にならないので、きちんと表示されるようにしたいです。

filterでの絞りこみがうまくできませんでした。
他にやり方はありますでしょうか?

このようなHTMLの表示にしたいです。

HTML

1<h3>赤</h3> 2<div> 3 <div> 4 <ul> 5 <li>りんご</li> 6 <li>りんごです</li> 7 </ul> 8 </div> 9</div> 10<div> 11 <div> 12 <ul> 13 <li>りんご</li> 14 <li>りんごです</li> 15 </ul> 16 </div> 17</div>

現在の表示はこちらです。重複している<h3>の部分だけ消したいです。

HTML

1<h3>赤</h3> 2<div> 3 <div> 4 <ul> 5 <li>りんご</li> 6 <li>りんごです</li> 7 </ul> 8 </div> 9</div> 10<h3>赤</h3> 11<div> 12 <div> 13 <ul> 14 <li>りんご</li> 15 <li>りんごです</li> 16 </ul> 17 </div> 18</div>

#現在のコード

javascript

1//handleClickという変数に入れる 2//後に書かれているonクリックイベントで以下が発火する 3 var handleClick = function( dataName ){ 4 $("#hoge").show(); 5 6//data属性を取得 7 var dataName = $(this).data("name"); 8//ajaxにてJSONを取得 9 $.ajax({ 10 type: 'GET', 11 url: jsonPath, 12 cache: false 13 }).then(function(data){ 14 15//JSONの値を検索し、絞り込む 16 var result = []; 17 data.filter(value => { 18 value.wrap.forEach(key => { 19 if(key.name === dataName) { 20 result.push(value); 21 } 22 }); 23 }); 24//検索して絞り込んだ結果をループで表示 25 var h = ''; 26 for(var i in result){ 27 h += '<h3>' + result[i].color + '</h3>'; 28 h += '<div>'; 29 for(var j in jsondata[i].wrap){ 30 h += '<div><ul>'; 31 h += '<li>' + jsondata[i].wrap[j].name + '</li>'; 32 h += '<li>' + jsondata[i].wrap[j].desc + '</li>'; 33 h += '</ul>'; 34 h += '</div>'; 35 } 36 h += '</div>'; 37 } 38 $('#hoge').html(h); 39 40 }) 41 } 42//onクリックイベントをそれぞれ指定の値にHTMLへ付与 43 var arr = ["りんご","パイナップル","ぶどう","みかん"]; 44 arr.forEach((value) => { 45//上記で書かれたhandleClickを入れる 46 $('[data-name="'+ value +'"]').on('click', handleClick ); 47 }); 48

APIとして読み込むJSON

json

1 2[ 3 { 4 "color": "赤", 5 "wrap": [ 6 { 7 "name": "りんご", 8 "desc": "りんごです" 9 } 10 ] 11 }, 12 { 13 "color": "紫", 14 "wrap": [ 15 { 16 "name": "ぶどう", 17 "desc": "ぶどうです" 18 } 19 ] 20 }, 21 { 22 "color": "赤", 23 "wrap": [ 24 { 25 "name": "りんご", 26 "desc": "りんごです" 27 } 28 ] 29 }, 30]

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

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

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

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

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

Yasumichi

2020/05/01 14:50

元々の json に重複があっても一つにしたいということですか?
southern_flavor

2020/05/01 15:24

はい、上記では<h3>の部分だけ消してますが、要は重複があったら削除したいということです。 詳しくは追記します。
southern_flavor

2020/05/01 15:58

私の方で一部勘違いしていた箇所があり、今回の質問内容と少し乖離するので新たに立てようと思います。
guest

回答1

0

ベストアンサー

こうしてみては。

js

1var h = ''; 2var pre = ''; 3for(var i in result){ 4 if ( pre !== result[i].color ) h += '<h3>' + result[i].color + '</h3>'; 5 pre = result[i].color; 6 /* 略 */ 7}

投稿2020/05/01 14:22

kei344

総合スコア69606

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

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

southern_flavor

2020/05/01 15:23

ありがとうございます。 この通りにやったら、問題なく、<h3>の部分だけ重複しないようになりました。 ただ、新たな問題を見つけてしまして、JSONの更新、追記したいと思います。
kei344

2020/05/01 15:34

質問のゴールを動かすのはあまりよくないので程々にしましょう。
southern_flavor

2020/05/01 15:56

そうですね。仕様の部分で一部勘違いしており、本来知りたいことも書き忘れていたので今回は一旦解決にしたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問