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

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

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

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

Q&A

解決済

3回答

7482閲覧

javascript jsonの配列を表示したい

shinoda

総合スコア75

JavaScript

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

0グッド

0クリップ

投稿2015/02/09 02:06

お世話になります。
あるjsonファイルの多次元配列をjavascriptやjqueryなどでテーブルの用な感じで表示、検索したいのですがなにかいい方法はありますでしょうか?
色々と探しているのですがうまく動くものがなく困っています。
多次元配列の階層が8層ぐらいあるのでどうしたら良いのでしょうか?

宜しくお願い致します。

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

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

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

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

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

guest

回答3

0

 munyaXさんの回答を見て、イメージされているのはこんな感じのものなのかな、と思いました。

lang

1var json = [ 2{"年":"1992", "国":"スペイン(Spain)", "都市":"バルセロナ(Barcelona)"}, 3{"年":"1996", "国":"アメリカ合衆国(United States)", "都市":"アトランタ(Atlanta)"}, 4{"年":"2000", "国":"オーストラリア( Australia)", "都市":"シドニー(Sydney)"}, 5{"年":"2004", "国":"ギリシャ(Greece)", "都市":"アテネ(Athens)"}, 6{"年":"2008", "国":"中国(China)", "都市":"北京(Beijing)"}, 7{"年":"2012", "国":"イギリス(United Kingdom)", "都市":"ロンドン(London)"}, 8{"年":"2016", "国":"ブラジル(Brazil)", "都市":"リオデジャネイロ(Rio de Janeiro)"}, 9{"年":"2020", "国":"日本(Japan)", "都市":"東京(Tokyo)"} 10]; 11 12 13document.body.appendChild( 14 (function(k, table){ 15 16 table.appendChild(k.reduce(function(pV, cV, i, self){ 17 return pV.appendChild( 18 document.createElement('th').appendChild( 19 document.createTextNode(cV) 20 ).parentNode 21 ).parentNode; 22 }, document.createElement('tr'))); 23 24 json.forEach(function(v, i, self){ 25 table.appendChild(k.reduce(function(pV, cV, i, self){ 26 return pV.appendChild( 27 document.createElement('td').appendChild( 28 document.createTextNode(v[cV]) 29 ).parentNode 30 ).parentNode; 31 }, document.createElement('tr'))); 32 }) 33 34 return table; 35 })( 36 json.reduce(function(pV, cV, i, self){ 37 return pV.concat( Object.keys( cV ) ) 38 },[]) 39 .filter(function (v, i, self) { 40 return self.indexOf(v) === i; 41 }), 42 document.createElement('table') 43 ) 44);

 ただ、これが「8層」あるとなると、8次元空間にしか展開できないと思いますので、見やすく表示するというのは無理かなあ、と。

投稿2015/02/11 03:19

Lhankor_Mhy

総合スコア36087

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

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

shinoda

2015/02/12 03:50

お世話になっております。 返信が遅くなってしまい申し訳ありません ご回答されたように8次元だとなかなか見やすく表示というのは難しそうですね。 いま現在使っている一覧表示が無難な選択なのかなと思いました。 ご回答有難うございました
guest

0

jsdo.it で こんなサンプルをみつけました。

jquery のプラグインも見つけました。

...
このプラグインを使えば、script内に記述したJSONデータや外部JSONファイルからHTMLのテーブルを作成することができます。
しかも!作成したテーブルにはソート、検索、ページャーの機能が付いており、至れり尽くせりのプラグインです。
...

投稿2015/02/10 12:56

katoy

総合スコア22324

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

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

shinoda

2015/02/12 03:48

返信が遅くなって申し訳ございません ご回答された件ですが他で投稿していますが現在私が使っているものと同じだったのでやはりこの方法が最善なのかと思いました。 ご回答有難うございました。
guest

0

ベストアンサー

例えば以下のようなJSONがあったら

lang

1var json = { 2 [1, 2, ['a', 'b', 'c']] 3};

以下のようなHTMLを吐く感じでしょうか?

lang

1<table> 2<tr> 3 <td>1</td> 4 <td>2</td> 5 <td> 6 <table> 7 <tr> 8 <td>a</td> 9 <td>b</td> 10 <td>c</td> 11 </tr> 12 </table> 13 </td> 14</tr> 15</table>

この理解で正しい場合、確かにjQueryのプラグインでは見かけたことないですね。
(私も知らないだけで探せばあるのかもしれませんが)

ただ自分で書いてもそこまで難しいコードにはならないと思いますよ。
以下、擬似コードですが、

lang

1 2json2table({ 3 [1, 2, ['a', 'b', 'c']] 4}); 5 6function json2table(json){ 7 "<table>"を表示 8 for(var tr in json){ 9 "<tr>"を表示 10 for(var i=0; i<tr.length; i++){ 11 "<td>"を表示 12 if( tr[i] が 配列(オブジェクト)であれば ){ 13 json2table(tr[i]); //再帰 14 } 15 else{ 16 tr[i]を表示 17 } 18 "</td>"を表示 19 } 20 "</tr>"を表示 21 } 22 "</table>"を表示 23}

な感じで再帰使ってやれば良いかなと。

投稿2015/02/09 03:20

編集2015/02/09 03:32
munyaX

総合スコア783

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

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

shinoda

2015/02/09 03:41

早速のご回答ありがとうございます。 jsonの中身は以下の様な感じです ************************************* { "aaa": { "bbb":[ { "no":"111", "name":"zzz", "types":[ {"name":"フリー","type":"free"} ] ] } } ************************************* ご提示されたコードはこれから試してみたいと思います 再帰というのは深さということですか? 配列があればどんどん下の階層に下がっていくというような認識であってますでしょうか? phpで言うところのforeachをネストしていくような感じですかね? 上記のコードですと検索とかはできますでしょうか? [aaa][bbb][0] [aaa][bbb][1] と合ったら数字のところを変数にして検索のような感じにしたいのです。 よろしくお願いします。
munyaX

2015/02/09 03:46

>jsonの中身は以下の様な感じです あとはこれをどういったHTMLにしたいかを明示されると回答がつきやすいと思いますよ。インプットと、最終的なアウトプットの両方があると他の方もイメージしやすいのではないかと。 > 再帰というのは深さということですか? 再帰は簡単に言うと関数内で自分自身を呼び出すことです。詳しくはググッていただければ色々と読み物が出てくると思います。一度マスターすると面白いですよ。 > 上記のコードですと検索とかはできますでしょうか? > [aaa][bbb][0] > [aaa][bbb][1] > と合ったら数字のところを変数にして検索のような感じにしたいのです。 よくわかんないですw もう少し説明をお願いできますか?(;´∀`)
shinoda

2015/02/09 04:50

お世話になっております 配列の表示についてですがシンプルなテーブルで左側にキーを表示して(th)右側に要素(td)を表示できればいいかなと思っています。 再帰に関してはこれから調べて勉強したいと思います. 検索の件なのですが先程書いたJSONの配列の [aaa][bbb][0] [aaa][bbb][1] [aaa][bbb][2] ・・・以下ループ といった感じで最後の数字の部分がキーになっていてその下の階層のキーと要素を検索して表示したいと考えております。 私の知識が乏しく質問も回答もうまくできてないと思いますがよろしくお願いします。
munyaX

2015/02/09 05:04

> 配列の表示についてですがシンプルなテーブルで左側にキーを表示して(th)右側に要素(td)を表示できればいいかなと思っています。 手間を惜しまずHTMLのタグを書かれると話が早いと思いますw 入れ子になったらどうなるのかが現時点だと謎です。 > 最後の数字の部分がキーになっていてその下の階層のキーと要素を検索して表示したい なるほど、わからんw キーというのは配列の添字になっている0 , 1, 2 のことをさしていますか? その下の階層のキーというのは、  0の時は [aaa][bbb][1]  1の時は [aaa][bbb][2] をさしていますか? JSONをtableで、という話は理解できるのですが、 後半登場したこのプログラムが何をしたいのか目的が謎で処理をイメージすることができないです。
shinoda

2015/02/09 05:27

お世話になっております htmlの部分に関しては正直あまり考えておりませんでした。 多次元じゃなければjqueryで表示できるものがあったので同じように単純に二列のテーブルにできるのが理想です。(左側にキー、右側に要素) 検索の部分なんですが 0の時は[aaa][bbb][0] 1の時は [aaa][bbb][1] と言った感じです 数字の部分を前のページからフォームで渡して$iに格納したいと考えております。 全体のイメージとしてはjsonファイルの配列を一覧表示と検索して1件だけ表示したいというイメージです。 よろしくお願いします。
munyaX

2015/02/09 11:36

> 同じように単純に二列のテーブルにできるのが理想です。(左側にキー、右側に要素) 繰返しになりますが、入れ子の時はどうなるのですか? 元になるデータと、最終的なHTMLを提示されないのはなぜでしょうか?? (HTMLがわからないのであればEXCELか何かで表つくってキャプチャを上げるとかでいけるかなと思います) > 検索の部分なんですが > (snip) > 全体のイメージとしてはjsonファイルの配列を一覧表示と検索して1件だけ > 表示したいというイメージです。 つまり、レコードを一意に特定して表示させたいということですか? これはご自身で言われている通り、 data[aaa][bbb][i] とすればできますが…。 ※以下のデータを想定 var i = 0; var data = { 'aaa':{ 'bbb':[ {"no":"111","name":"aaa","types":[{"name":"フリー","type":"free"}]} , {"no":"222","name":"bbb","types":[{"name":"フリー","type":"free"}]} , {"no":"333","name":"ccc","types":[{"name":"フリー","type":"free"}]} ] } }
shinoda

2015/02/09 12:05

お世話になっております。 確かに入れ子の部分が困っています。 今現在は下記のような感じで表示しているのですがすごく縦長になってしまい一覧表示すると見づらいので http://marianoguerra.github.io/json.human.js/ 私の理想は下記のようなjqueryで多次元配列に対応していればいいのですが見つからなく質問させて頂いた次第です。 ****************************** <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="description" content="Columns のデモでーす。"> <title>Columns - jQueryプラグイン</title> <link id="style" href="css/classic.css" rel="stylesheet" media="screen"> </head> <body> <h1>Columns のデモでーす。</h1> <div id="columns"></div> <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <script src="js/jquery.columns.min.js"></script> <script> $(document).ready(function() { var json = [ {"年":"1992", "国":"スペイン(Spain)", "都市":"バルセロナ(Barcelona)"}, {"年":"1996", "国":"アメリカ合衆国(United States)", "都市":"アトランタ(Atlanta)"}, {"年":"2000", "国":"オーストラリア( Australia)", "都市":"シドニー(Sydney)"}, {"年":"2004", "国":"ギリシャ(Greece)", "都市":"アテネ(Athens)"}, {"年":"2008", "国":"中国(China)", "都市":"北京(Beijing)"}, {"年":"2012", "国":"イギリス(United Kingdom)", "都市":"ロンドン(London)"}, {"年":"2016", "国":"ブラジル(Brazil)", "都市":"リオデジャネイロ(Rio de Janeiro)"}, {"年":"2020", "国":"日本(Japan)", "都市":"東京(Tokyo)"} ]; $('#columns').columns({ data:json }); }); </script> </body> </html> ****************************** ご提示された検索の部分ですがmunyaX様の仰るとおりで実装できそうです var i = 0; の’0’の部分を変数にして個別に呼び出すということですよね? いかんせんjavascriptが全くの無知なものでjsonファイルを呼び出すコードさえわからないのでいま勉強しているところでございます。 ひと通り調べてまた質問させていただきます。 よろしくお願いします。
munyaX

2015/02/10 11:44

そうですね、一度要件を整理されてから再度ご質問された方が良いかもしれません(^^; ・目的 ・入力されるデータの仕様とサンプル ・最終的に出力したい結果 を明確にされると良いと思います。 明確になった時点で自己解決する場合も多いですので、あわてず作業をされると良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問