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

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

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

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

JavaScript

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

Q&A

解決済

4回答

463閲覧

入れ子になっているjsonを取得して配列に格納したい

OrangeHanzo

総合スコア55

JSON

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

JavaScript

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

0グッド

1クリップ

投稿2018/06/22 07:10

編集2018/06/22 07:19

下記のようなjsonを取得して配列に格納し、

var json = [ { num: 1, name: 'A県', AList: [ { num: 1, name: 'A社', BList: [ { num: 1, name: 'A課', }, { num: 2, name: 'B課', }, ] }, { num: 2, name: 'B社', BList: [ ] } ] }, { num: 2, name: 'B県', } ];

下記のようなlist

list A県  ┗A社     ┗A課     ┗B課  ┗B社 B県

を作成したいのですが、
配列にうまく格納できなく困っています。
(階層が深くなる部分までは取得できたのですが、浅く戻るタイミングでおかしくなり、やり直しているところです・・・)
このサイトを参考にすると良い、等あればご教授頂きたいです。

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

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

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

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

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

guest

回答4

0

ご提示のHTMLは不適格です
ネストのulはliの中に入らないとリストになりません

確認

HTML

1<ul> 2<li>A県 3 <ul> 4 <li>A社 5 <ul> 6 <li>A課</li> 7 <li>B課</li> 8 </ul> 9 </li> 10 <li>B社</li> 11 </ul> 12</li> 13<li>B県</li> 14</ul>

で大丈夫ですか?これをjavascriptで組み立てればよいですか?

sample

javascript

1<script> 2var json = 3 [ 4 { 5 num: 1, 6 name: 'A県', 7 AList: 8 [ 9 { 10 num: 1, 11 name: 'A社', 12 BList: 13 [ 14 { 15 num: 1, 16 name: 'A課', 17 }, 18 { 19 num: 2, 20 name: 'B課', 21 }, 22 ] 23 }, 24 { 25 num: 2, 26 name: 'B社', 27 BList: 28 [ 29 ] 30 } 31 ] 32 }, 33 { 34 num: 2, 35 name: 'B県', 36 } 37 ]; 38window.addEventListener('DOMContentLoaded', function(e){ 39 40var div=document.querySelector("#viewarea"); 41var ul1=document.createElement("ul"); 42 div.appendChild(ul1); 43 for(var i=0;i<json.length;i++){ 44 var li1=document.createElement("li"); 45 ul1.appendChild(li1); 46 li1.appendChild(document.createTextNode(json[i].name)); 47 if(typeof json[i].AList!=="undefined"){ 48 var ul2=document.createElement("ul"); 49 li1.appendChild(ul2); 50 for(var j=0;j<json[i].AList.length;j++){ 51 var li2=document.createElement("li"); 52 li2.appendChild(document.createTextNode(json[i].AList[j].name)); 53 ul2.appendChild(li2); 54 if(typeof json[i].AList[j].BList!=="undefined"){ 55 var ul3=document.createElement("ul"); 56 li2.appendChild(ul3); 57 for(var k=0;k<json[i].AList[j].BList.length;k++){ 58 var li3=document.createElement("li"); 59 li3.appendChild(document.createTextNode(json[i].AList[j].BList[k].name)); 60 ul3.appendChild(li3); 61 } 62 } 63 } 64 } 65 } 66}); 67</script> 68 69<div id="viewarea"></div>

投稿2018/06/22 07:16

編集2018/06/22 07:54
yambejp

総合スコア114779

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

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

OrangeHanzo

2018/06/22 07:18

あ、すみませんまだHTML組み立ててなかったので間違えてました。 消しておきます。
OrangeHanzo

2018/06/22 07:23

はい!上記の形で間違いございません! 配列への格納に失敗しており、ご教授いただけると嬉しいです。。
yambejp

2018/06/22 07:55

sampleつけときました
OrangeHanzo

2018/06/22 14:31

ご教授ありがとうございます! 実行確認出来ました!
guest

0

こんなのが有ります。

GitHub - suskind/json2html-list: Converts JSON to HTML UL-LI list

呼び出し方とかは、sample.htmlを見て下さい。

結構複雑なJSONでも綺麗に整形してくれます。

投稿2018/06/22 15:34

oikashinoa

総合スコア2826

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

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

0

ベストアンサー

結果としてDOMツリーを作ってるんだから、「HtmlElementを作る→子供のElementをappendする」というのを再帰的に回してあげればいいのでは。

例えば、

function tree(parentElement, array){ if(!array){ return parentElement; } for(let i = 0; i < array.length; i++){ let child = array[i]; let li = document.createElement('li'); li.textContent = child.name; parentElement.append(li); let ul = document.createElement('ul'); ul = tree(ul, child.AList); ul = tree(ul, child.BList); parentElement.append(ul); } return parentElement; };

↑こんな風にfunction作ってあげると、

let root = document.createElement('ul'); root = tree(root, json); /* <ul> <li>A県</li> <ul> <li>A社</li> <ul> <li>A課</li> <ul></ul> <li>B課</li> <ul></ul> </ul> <li>B社</li> <ul></ul> </ul> <li>B県</li> <ul></ul> </ul> */

↑こんな感じでツリー構造が作れる。

投稿2018/06/22 07:35

tkturbo

総合スコア5572

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

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

OrangeHanzo

2018/06/22 14:32

ご教授ありがとうございます! 理想の形で出力されました!
guest

0

json to html
json to table
とかで検索するとライブラリー有りますよ。
出先なので、詳しくは後ほど。

投稿2018/06/22 11:58

oikashinoa

総合スコア2826

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

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

OrangeHanzo

2018/06/22 14:34

情報ありがとうございます!! こんなものが・・・!! 参考にさせて頂きます! こちら解決してから色々とテコを入れないといけないため、改善しやすいコードをにできればと考えてます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問