2次元のJSON形式の配列をHTMLに展開する方法

このQ&Aのポイント
  • 2次元のJSON形式の配列をHTMLに書き出す方法について教えてください。
  • 配列を指定するカラム名を変数にしたいがうまくできません。どうすればいいですか?
  • JSONデータの1列目のカラム名は『ID』で固定で、2列目は変動します。カラム名を別処理で取得し、『hoge』の部分に格納してHTMLに書き出したいです。
回答を見る
  • ベストアンサー

2次元のJSON形式の配列の展開

JSON形式で受け取った2次元配列をHTMLに書き出そうとしています。 配列を指定するカラム名?を変数にしたいのですがうまくできません。 var hoge = "abc"; var len = result.length; for (i = 0; i < len; i++){  objResult.append("<li><a href=" + result[i].ID + ">" + result[i].hoge + "</a></li>"); } ※objResultはul要素を変数に収めたものです。 JSONデータは1列目のカラム名は『ID』で固定ですが2列目は変動する為、上記の『hoge』の部分にはJSONデータを受け取る前にカラム名を別処理で取得して格納しています。 ご教授の程よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

こんにちは。 >『hoge』が変数として認識されず hogeがkeyの文字列なら、以下の例のような指定方法でためしてみてください。 >column』の部分は変動する為、~~値は別の処理で取得することができます 対象オブジェクトから直接そのkeyも取得できますよ。 <参考例> var jsonData = [{"ID":"1","hoge":"aaa"},{"ID":"2","fuga":"bbb"}]; var i, j, k, data = ""; for(i = 0; j = jsonData[i++];){  for(k in j) data += "[ " + k + " : " + j[k] + " ] ";  data += "\n"; } alert(data);

nyan_ajd
質問者

お礼

回答ありがとうございます。 なるほど!と唸ってしまいました…For文をネストして取り出すのですね。 少し改造しましたが希望通りの値を得ることができました。 本当にありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

質問の趣旨がいまいちわかりかねますが、文字列を使ってプロパティにアクセスするだけなら こんな感じでいけるかもしれません。 <script> var obj=[{"hoge":1,"fuga":"abc"},{"hoge":2,"fuga":"def"},{"hoge":3,"fuga":"xyz"}]; var xxx="fuga"; document.write(getProperty(obj[0],xxx)); function getProperty(obj,propertyName){ if((typeof obj).toUpperCase()!="OBJECT") return false; for(var i in obj){ if(i==propertyName) return obj[i]; } return null; } </script>

nyan_ajd
質問者

お礼

言葉足らずな質問でわかり辛くすみませんでした。 アドバイス頂きありがとうございました。 今回は他の方法にて実現しました。 また機会がございましたらよろしくお願いします。

nyan_ajd
質問者

補足

わかりにくくてすみません>< var jsonData = [{"ID":"1","colum":"aaa"},{"ID":"2","colum":"bbb"}]; というJSON形式のデータがあります。 上記でいうと『colum』の部分が変動します。 もし変動しなければ、 var len = jsonData.length; for(i = 0; i < len; i++){  $("ul").append("<li>" + jsonData[i].ID + jsonData[i].column + "</li>"); } で、希望通りの形ができます。 しかし、『column』の部分は変動する為、以下のように変数にしたいと思っています。(値は別の処理で取得することができます。) var columnName = hoge; var len = jsonData.length; for(i = 0; i < len; i++){  $("ul").append("<li>" + jsonData[i].ID + jsonData[i].hoge + "</li>"); } 上記の形では『hoge』が変数として認識されず、undefinedになってしまいます。 PHPでは、 array[0][1] のような形で多次元配列にアクセスできる方法があったと思うのですが、JQUERYには同様の方法はないのでしょうか?もしくは上記の『hoge』を変数として認識させる方法はありますか?

関連するQ&A

  • JSON多次元オブジェクト(?)を配列へ変換したい

    ・下記のようなJSON多次元オブジェクト(?)を配列へ変換したいのですが、どうすれば良いでしょうか? ・json_decode試したけどうまくいきませんでした ・出来れば、data以下だけを配列で取得したいです array(1) { [0]=> string(1284) {"version":1,"req_id":null,"error":null,"data":[ {"name":"Sad","j_title":"A","id":"23","thumb":"hoge1","date":"2009","title":"Ch","url":"hoge2"}, {"name":"Wil","j_title":"r","id":"30","thumb":"hoge3","date":"2013","title":"Po","url":"hoge8"} ]} [1]=> string(1282) {"version":1,"……

    • ベストアンサー
    • PHP
  • jQueryの配列の渡し方について

    jQueryでの配列の渡し方についてご質問です。 jQueryではなくjavascriptでも良いのですが、不慣れなのでjQueryで試行しています。 ---------------------------------------------- targettab = targettab.split( ',' ); jQuery.each(targettab, function(i, val) { var livetab = "<li id='" + i + "'>" + val + "</li>"; jQuery(livetab).appendTo(jQuery("ul#tab")); }); ---------------------------------------------- ※変数 targettab に「あああ,いいい,うううう]という値が入っています。 こう↑書きますと、ul#tabの内部に <li id='1'>あああ</li> <li id='2'>いいい</li> <li id='3'>ううう</li> と入り、リストが生成されます。 ここまでは良いのですが、このそれぞれのidに入っている数字を任意の文字列にしたいです。 例えば、 targetstrings = "hoge,foo,dummy"; targetstrings = targetstrings.split( ',' ); という配列を差し込んで、最終的に <li id='hoge'>あああ</li> <li id='foo'>いいい</li> <li id='dummy'>ううう</li> という形で整形したいです。 jQuery.eachでは、そもそもできないような気がしていますが、 お知恵を拝借できましたら、大変ありがたいです。 拙い説明で恐縮ですが、どうぞよろしくお願いします。 不明点などあれば、何なりとお知らせください。

  • jQuery for内にある配列の後のドットは何?

    jQuery(?) for文内で、配列の後にドット演算子があるのですが、これは何でしょうか? for ( var i=0, len=hoge.length; i<len; i++ ) {  hoge[i].max = 5;  hoge[i].count = i; } ・maxはどこにある(属している)のでしょうか? ・hoge配列内? ・そもそもmaxは変数? ・ちなみに、hogeは、getElementsByClassNameで取得しています ・この場合のドット演算子は、セレクタの一種? ・変数に格納しているわけではなくて、DOMを操作しているだけ?

  • 復数の配列をJson形式にまとめたい

    javascriptで復数の配列をJson形式にまとめたい ms = "ガンダム,ガンキャノン,ガンタンク,シャアザク,グフ"; pilot = "アムロ,カイ,ハヤト,シャア,ラル" cost = "100,70,60,90,90"; ↑カンマ区切りのデータを配列化してそれぞれ変数に入っています。 これらを以下の形式(json)にして、testdataに取り込みたいのですが、 識者の方々がいつも行われる手法、ベストと思われる手法を伺いたいです。 var testdata = {"ms":"ガンダム", "pilot":"アムロ", "cost":"100"}, {"ms":"ガンキャノン", "pilot":"カイ", "cost":"70"},            .            .            .            . ; } 純粋なjavascriptよりは、 jQueryベースの記述の方が個人的には理解し易いです。 どうぞよろしくお願いします。

  • JSON形式で取得した8桁の数字を○○年にしたい

    8桁の数字データを、○○年○○月○○日と変換して表示させたいのですが、どうやったらよいでしょうか。 今、手元に、csvからデータを取得して表示させるサンプルがあります。 その元データの生年月日部分は、8桁の数字です。 // JSON形式で取得したデータを配列に変換 var list = eval( '(' + data + ')' ); // データを1データ毎 $.each(list,function(i) { // 各項目毎に変数に入れる var birth = makeTableData(this.birth,"data_birth"); みたいな感じになっています。 イメージしているのは、 substr($hoge,0,4); みたいな感じで、 この格納されている8桁の数字データを、 ○○年○○月○○日と変換させ表示させたいのですが、 どうすればよいのでしょうか? また、「JSON形式で取得したデータを配列に変換」って意味は、 javasvriptオブジェクトに変換しているってことなのでしょうか?

  • JSON変換データをjavascriptへ渡したい

    json_encode()関数で、JSON形式の文字列に変換した配列データをjavascriptへ渡したいのですが、 いつのまにか、ただんの文字列になってしまいます。なんででしょうか? ■コード $jsondata= json_encode($originalarray) <script type="text/javascript"> var result = <?php echo($jsondata) ?>; alert(result); </script> ■変数 ・$originalarray Array ( [0] => ./im/1a.j [1] => ./im/2.j [2] => ./im/9_1.j ) ・jsondata [".\/im\/1a.j",".\/im\/2.j",".\/im\/9_1.jp"] ・result ./im/1a.j./im/2.j./im/9_1.jp

    • ベストアンサー
    • PHP
  • 3次元配列を2次元配列にする方法はありますか?

    3次元配列を2次元配列にする方法はありますか? すいません、初心者です。 オープンソースとyahooとgoogleのAPIを使って統合型メタ検索エンジンを作っています。 yahooの結果の配列は2次元配列で出せました。 $search_results[$i]["url"] google APIは1回のリクエストで8件までしか呼び出せないみたいなので、 curl_multi関数を使って複数のリクエストを同時に取得しています。 そうしたら結果の配列は三次元配列になりました。 $search_results[$id][$i]["url"] 以下googleの関数です。curl_multiの部分等、文字数の関係で省略しています。 省略した部分のソースは下記リンクにのっています。 http://phpspot.org/blog/archives/2008/02/phpapi.html function search_google($query) { $curls = array(); $search_results = array(); $i=0; $site_results = array( 'http://ajax.googleapis.com/&start=0', 'http://ajax.googleapis.com/&start=8', 'http://ajax.googleapis.com/&start=16', 'http://ajax.googleapis.com/&start=24', 'http://ajax.googleapis.com/&start=32', 'http://ajax.googleapis.com/&start=40', 'http://ajax.googleapis.com/&start=48', 'http://ajax.googleapis.com/&start=56'); foreach($curls as $id=>$c) { $searchs[$id] = curl_multi_getcontent($c);//$cが$site_resultsのリクエスト結果 curl_multi_remove_handle($mh, $c); $json=json_decode($searchs[$id]); if($json->responseStatus != 200){exit();} $responseData = $json->responseData; $results = $responseData->results; for($i=0;$i<count($results);$i++){ $title = $current_result->title; $search_results[$id][$i]["title"]= $title; } } curl_multi_close($mh); return $search_results; } 統合型メタ検索にしたいと考えているのでgoogle配列の変数[$id]同士を結合して yahooの結果と同じく $search_results[$i]["url"] のような二次元配列にしたいのですが、そのようなことは可能ですか? 本当は両方とも3次元配列にするという処理が適切だと思いますが、初心者がオープンソースを改良して使用しているので、どこを直せば3次元配列のものをうまく表示できるのかわからないのです。 わかりにくかったらすいません。どうか、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 配列

    String型の配列の中の文字列の文字数を数える方法で困っています。 問題は、int型の変数lenで与えられた数字よりも大きい文字数の文字列はいくつあるか調べます。 例) stringsLongerThan({"a","ab","abc"}, 0) 3つ全ての文字列の文字数は0より大きいので3を返す stringsLongerThan({"a","ab","abc"}, 2) "abc"の文字数が2より大きいので1を返す stringsLongerThan({"a","ab","abc","abcd","abcde","abcdef","abcdefg"}, 3) "abcd","abcde","abcdef","abcdefg"の4つが文字数3より大きいので4を返す 途中まで組んだのですが、配列array[]の中の文字列の文字数を数えるにはどうしたらよいのでしょうか? public int stringsLongerthan(String[] array, int len){       int result=0;      for(int i=0;i<array.length;i++){        //ここで配列array[i]の文字列の文字数を数える       int count=文字数;       if(cont>len)        result++;     }      return result; } 宜しくお願いします。

    • ベストアンサー
    • Java
  • JSONデータをフォームにセットしたい

    JSONデータを「jQuery.val」でフォームにセットしたいのですが、うまくいきません。どうしたら良いでしょうか? 具体的には、[",]が削除された状態でセットされます。元は配列ですが、JSONデータへ変換したので、フォームへセット出来ると思っていたのですが…。 JSONは、「ある形式に沿った文字列」という認識でいたのですが、違うのでしょうか? ■コード $jsondata= json_encode($originalarray) <script type="text/javascript">  var result = <?php echo($jsondata) ?>;  $("input#jsondata").val(result); </script> ■変数 ・$originalarray Array ( [0] => ./im/1a.j [1] => ./im/2.j [2] => ./im/9_1.j ) ・jsondata [".\/im\/1a.j",".\/im\/2.j",".\/im\/9_1.jp"] ・フォームにセットされる値 ./im/1a.j./im/2.j./im/9_1.jp →ここに「jsondata」をセットさせたい

  • 2次元配列について

    プログラミング初心者です。2次元配列のイメージがつかめません。教えてください。 例えばExcelの表があり、A列に名前のデータ、B列にその人の住所のデータがあったとします。プログラミングで1次配列の値だけ取得するような処理が書かれていた場合、名前のデータだけを取得しているのでしょうか?因みに$var[0]というように数字ではなく、何かを示す名前になっています。例えば$var[name0]や$var[name1]のようになっています。これが$var[name0][place0]や$var[name1][place0]みたいになっていたら住所のデータを取得するのでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう