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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JSON

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

JavaScript

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

jQuery

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

Q&A

解決済

1回答

1639閲覧

JSONの値を重複のない一覧で読み込みたい

happy_girl

総合スコア7

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JSON

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

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2021/05/12 10:02

編集2021/05/13 02:51

JSONの値を重複のない一覧で読み込みたい

jQuery,JavaScriptを使用してJSONを読み込み表示したいです。

JSONで管理しているカテゴリーの値の一覧を表示させたい。
カテゴリー1〜カテゴリー4の値の一覧です。

重複のある状態での一覧は読み込みできるんですが
重複項目をフィルタリングができないです。
環境はPHP使用不可環境です。

sample.json

[ { "タイトル": "この文章はダミーです。", "キャッチコピー": "この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。", "タグ1": "アケビ", "タグ2": "アセロラ", "タグ3": "アボカド", "タグ4": "イチゴ" }, { "タイトル": "この文章はダミーです。", "キャッチコピー": "この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。", "タグ1": "イチジク", "タグ2": "ウメ(梅)", "タグ3": "アケビ", "タグ4": "アセロラ" } ]

html JSON読み込み

<div class="categorylist"> <script type="text/javascript"> $(function () { $.getJSON("../json/sample.json", function (sample_list) { for (var i in sample_list) { var h = '<dd>' + sample_list[i].カテゴリー1 + '</dd>' + '<dd>' + sample_list[i].カテゴリー2 + '</dd>' + '<dd>' + sample_list[i].カテゴリー3 + '</dd>' + '<dd>' + sample_list[i].カテゴリー4 + '</dd></dl>'; $(".categorylist").append(h); } }); }); </script> </div>

試したこと

一度重複のある一覧で書き出し、jQueryで削除しようとも考えたのですが
動的に追加された要素へのイベント付与が
$(document).on('click'〜
でしか動かず、、、
クリックじゃなく、読み込み時に発火させたらできるのかもと思ってためしたのですが不可能でした。

試した jquery

$(document).on('click', '.categorylist', function(){ console.clear(); $(".categorylist dd").filter(function () { const t = $(this).text(); return this !== $(`.categorylist dd:contains('${t}')`).get(0); }) .remove(); });

表示したい一覧

・アケビ ・アセロラ ・アボカド ・イチゴ ・イチジク ・ウメ(梅)

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

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

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

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

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

maisumakun

2021/05/12 10:03

どのように表示したいのですか?
happy_girl

2021/05/12 10:09

ご連絡ありがとうございます。 重複のないの下記ような一覧を表示したいです。 ・アケビ ・アセロラ ・アボカド ・イチゴ ・イチジク ・ウメ(梅)
maisumakun

2021/05/12 10:13

カテゴリーは無視でいいのですか?
happy_girl

2021/05/12 10:16

カテゴリーは無視で大丈夫です。 JSONの値の一覧だけを表示させたいのですが、プラグイン等を探してもどうもうまくいかずです。。。
guest

回答1

0

ベストアンサー

javascript

1<script> 2window.addEventListener('DOMContentLoaded',async()=>{ 3 const res=await fetch("sample.json") 4 .then(x=>x.json()) 5 .then(x=>[...new Set(x.map(x=>Object.values(x)).flat())]); 6 res.forEach(x=>document.querySelector('.categorylist').innerHTML+=`<li>${x}</li>`); 7})() 8</script> 9<div class="categorylist"></div>

投稿2021/05/12 10:17

編集2021/05/12 10:41
yambejp

総合スコア116835

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

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

happy_girl

2021/05/12 10:30

ご回答ありがとうございます。 "アケビアセロラアボカドイチゴイチジクウメ(梅)" のような1つの文章ではなく htmlタグで囲うような表示がしたいのですが、可能なのでしょうか?
yambejp

2021/05/12 10:32

配列で受け取れていませんか? それをhtml要素に落とし込むのは楽だとおもいますけど・・・
happy_girl

2021/05/12 10:39

ありがとうございます。 ご回答いただいて恐縮なのですが、 console.log(res); の部分を $(".categorylist").append(res); のようにして確認したのですが、 落とし込み方が間違っているのでしょうか...?
yambejp

2021/05/12 10:41

修正しておきました
happy_girl

2021/05/13 02:50

ありがとうございます! 恐れ入りますが、 下記のようなJSONの場合タグの一覧を読み込むことは可能でしょうか...? [ { "タイトル": "この文章はダミーです。", "キャッチコピー": "この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。", "タグ1": "アケビ", "タグ2": "アセロラ", "タグ3": "アボカド", "タグ4": "イチゴ" }, { "タイトル": "この文章はダミーです。", "キャッチコピー": "この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。", "タグ1": "イチジク", "タグ2": "ウメ(梅)", "タグ3": "アケビ", "タグ4": "アセロラ" } ]
yambejp

2021/05/13 02:57

「タグ」から始まる要素を抜き出せばよいのですか?
happy_girl

2021/05/13 03:41

そうです。 「タグ」から始まる要素を抜き出したいです。 簡易のコンテンツ管理システムのようなページを想定しておりまして、、、
yambejp

2021/05/13 03:56

window.addEventListener('DOMContentLoaded',async()=>{ const res=await fetch("x.json") .then(x=>x.json()) .then(x=>[...new Set(x.map(x=>Object.entries(x).filter(x=>/^タグ/.test(x[0])).map(x=>x[1])).flat())]); res.forEach(x=>document.querySelector('.categorylist').innerHTML+=`<li>${x}</li>`); })()
happy_girl

2021/05/13 06:46

ありがとうございます!!!! こちらで実現できました!!!
happy_girl

2021/05/14 08:00

すいません。。。 上記IEではうごなかいようでして、、、 IEでも動作する方法はありますでしょうか?
yambejp

2021/05/14 08:24 編集

IEが必須ならjQueryの$.ajaxでぐちゃぐちゃやらないとだめでしょうね
happy_girl

2021/05/14 08:19

ご回答ありがとうございます。 そうなのですね。。。 IEで想定していたので、ふりだしに戻ってしまいました...
yambejp

2021/05/14 08:27 編集

書くのは意外に楽でした。冗長に書いてください こんな感じです <script> $(function(){ $.ajax({ url:'sample.json', dataType:'json', }).done(function(data){ var list=[]; for(var i=0;i<data.length;i++){ for(var j in data[i]){ if(/^タグ/.test(j)) list.push(data[i][j]); } } list=list.filter(function(i,j,k){return k.indexOf(i)==j;}); for(var i=0;i<list.length;i++){ $('.categorylist').append($('<li>'+list[i]+'</li>')); } }); }); </script> <ul class="categorylist"></ul>
yambejp

2021/05/14 08:28

ちなみにIE対応は茨の道です。 死ぬ気で学習して自力で解決できるようになっておかないと どんどん教えてくれる人は減っていきますよ
happy_girl

2021/05/14 10:11

そうなんですね、、、 勉強します! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問