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

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

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

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

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

798閲覧

連想配列と配列が組み合わさっているものの中身を表示させたい

kakinosuke

総合スコア8

JSON

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

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/10/16 08:53

編集2020/10/16 09:41

下記のjsonのchidrenのnameをすべて表示させたいのですが、どうすればよいでしょうか。
childrenの中にchildrenがあり、childrenの個数が可変でも対応させたいです。

json

1{ 2 "children": [ 3 { 4 "contents": { 5 "A": 0, 6 "B": 1, 7 "C": 2 8 }, 9 "children": [ 10 { 11 "children": [], 12 "name": "test03", 13 "id": 3 14 }, 15 { 16 "children": [], 17 "name": "test04", 18 "id": 4 19 } 20 ], 21 "name": "test01", 22 "id": 1 23 }, 24 { 25 "contents": { 26 "A": 0, 27 "B": 1, 28 "C": 2 29 }, 30 "children": [ 31 { 32 "children": [], 33 "name": "test05", 34 "id": 5 35 }, 36 { 37 "children": [], 38 "name": "test06", 39 "id": 6 40 } 41 ], 42 "name": "test02", 43 "id": 2 44 } 45 ] 46}

得たい結果

[ { "name": "test01" }, { "name": "test02" }, { "name": "test03" }, { "name": "test04" }, { "name": "test05" }, { "name": "test06" } ]

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

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

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

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

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

yambejp

2020/10/16 09:18

結果として何が得られればいいのでしょうか?
kakinosuke

2020/10/16 09:27

すみません。得たい結果を追加しました。
yambejp

2020/10/16 09:58

単純に再帰的なnameの取得はかんたんですが childrenの配列の中のオブジェクト直下のnameといわれると微妙です。
guest

回答3

0

ベストアンサー

追記を踏まえて再度の回答です。

全てのキーを順番に取得し、それがchildrenという名前であればその中のname要素を取ってくるという形にしました。
全てのキーとそれに対応する値を取得するには、調べてみましたJSON.parse関数の第2引数を使うと良いようです。

JavaScript

1const json = { …略… }; 2 3// 余談ですが、childrenはchildの複数形なので、要素名はchildの方が良いのでは無いでしょうか。 4const names = []; 5JSON.parse(JSON.stringify(json), (key, value) => { 6 if (key == "children"){ 7 if (Array.isArray(value.name){ 8 value.name.forEach(n => names.push({ "name": n.name })); 9 }else{ 10 names.push({ "name": n.name }); 11 } 12 } 13}); 14 15console.log(JSON.stringify(names));

投稿2020/10/16 10:15

編集2020/10/16 10:20
Automatic9045

総合スコア313

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

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

Automatic9045

2020/10/16 10:29 編集

列挙されるのが最下層からになるのが気になるようであれば、参考サイトに書かれているもう片方の方法を試してみて下さい。
kakinosuke

2020/10/16 11:02

ありがとうございます!調べてみます。
guest

0

工夫次第ですがnameを再帰的に探す処理だけ書いておきます

投稿2020/10/16 10:11

yambejp

総合スコア114839

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

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

yambejp

2020/10/16 10:12 編集

const a={ "children": [ ・・・・ ] }; const array_values=(val,key)=>{ var ret=[]; var test=Object.prototype.toString.call(val); if(/Number|String|Null/.test(test)){ ret.push([val,key]); }else{ Object.entries(val).forEach(x=>{ret=ret.concat(array_values(x[1],x[0]))}); } return ret; } console.log(array_values(a,null).filter(x=>x[1]=="name").map(x=>x[0]));
guest

0

こんばんは。

JSONを文字列にして表示するだけであれば、JSON.stringify関数で簡単に実現できます。

JavaScript

1const json = { …略… }; 2console.log(JSON.stringify(json.children));

…が、多分要件はこれだけでは無いと思います。
仕様をもう少し詰めていただけると更に具体的な回答が出来ます。

投稿2020/10/16 09:22

Automatic9045

総合スコア313

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

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

kakinosuke

2020/10/16 09:27

すみません。得たい結果の詳細を追加しました。
Automatic9045

2020/10/16 09:29

追記されたJSONは不正なフォーマットになっています。 これだとどう回答すれば良いか分からないので、JSONの構造を正確に記入して下さい。
Automatic9045

2020/10/16 09:43

元になるJSONで直下にあるchildren要素ですが、同じ階層に他のchildren要素が入る可能性はありますか?
Automatic9045

2020/10/16 10:23

了解しました。 先程キーの重複が無い前提で新たに回答しましたので、ご覧になってみて下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問