復数の配列をJson形式にまとめる方法
- JavaScriptを使用して、カンマ区切りのデータを配列に変換し、JSON形式にまとめる方法をご紹介します。
- jQueryを利用することで、より簡潔に配列をJSON形式に変換することができます。
- 要素ごとにループを回してJSON形式にまとめることで、効率的に配列を結合することができます。
- ベストアンサー
復数の配列を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ベースの記述の方が個人的には理解し易いです。 どうぞよろしくお願いします。
- Search_tmp
- お礼率52% (21/40)
- JavaScript
- 回答数3
- ありがとう数1
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
愚直にやるなら var msdata = (function(){ var temp = [ms.split(/,/), pilot.split(/,/), cost.split(/,/)]; var o = {}, n = temp[0].length; for (var i = 0; i < n; i++) { var m = temp[0][i].trim(); var p = temp[1][i].trim(); var c = temp[2][i].trim(); o[m] = { pilot:p, cost:c }; } return o; })(); 本格的にやるなら、以下のようなライブラリを利用することになります。 https://www.google.co.jp/search?q=csonv.js
その他の回答 (2)
- pringlez
- ベストアンサー率36% (598/1630)
あ、配列をJSON形式にする方法のベストですか。なるほど質問を誤認していました。…が、それは最初の一回しか行わない処理ですし、ベストとか考える必要は無く普通にループで格納するだけでいいと思いますよ。
補足
お付き合いありがとうございます! 意図も理解いただき感謝です。 > 普通にループで格納するだけ というのは、今回の例で言えば具体的にはどんな記述でしょうか。 調べ方が下手で情けないのですが、 既にJson形式になったものからの説明が多くて、詰まっております。 参考になるページでも構いませんので、ご教授いただけますと大変ありがたいです。
- pringlez
- ベストアンサー率36% (598/1630)
そもそも本来はデータというのは、どのように使うかによって表現方法を変えるべきです。しかしこの質問ではどのように使うか説明がないので、ベストな方法はこの状況では誰にも分からないと思いますよ。 ただいまの情報の中で私が使用する方法を想像して補った上で、データ構造を考えるとすれば以下のようにします。 var msdata = { ガンダム : {"pilot":"アムロ", "cost":"100"}, ガンキャノン : {"pilot":"カイ", "cost":"70"} }; 配列にしてしまうとデータの特定・取り出しに、以下のような原始的で回りくどい方法をとらねばなりませんが、 for (var i = 0; i < testdata.length; i++) { if (testdata[i].ms == "ガンダム") { alert(testdata[i].pilot); break; } } 上記のデータ構造なら、以下のようにシンプル・スマート・高速にデータを取り出すことができます。 alert(msdata["ガンダム"].pilot);
補足
アドバイスありがとうございます! そして説明不足で本当に申し訳ありません。 経緯としては、 カンマ区切りのデータが復数あって、それらをいろいろと扱う際に いったんJson形式で取りまとめておけば、使い回す際にラクな状況でして、 その為のよりよい手法をお尋ねした次第です。 伺いたいのは、上記の配列(3個)から ご提示いただいたような var msdata = { ガンダム : {"pilot":"アムロ", "cost":"100"}, ガンキャノン : {"pilot":"カイ", "cost":"70"} }; この形を作るための方法です。 Json形式にすれば取り出す方法もわかるのですが、 その前段階にあたる「Json形式にする方法」で悩み中です。 msdataに ガンダム : {"pilot":"アムロ", "cost":"100"}, ガンキャノン : {"pilot":"カイ", "cost":"70"} が入っている状態を作る為の方法を知りたいです。
関連するQ&A
- ガンダムのMSの形式番号
攻略本を買い、ガンダムのゲームをやっています。 攻略本を見ていて、連邦軍のMSは RX-75(ガンタンク)77(ガンキャノン)78(ガンダム)79(ジム) ジオン軍は MS-06(サク)07(グフ)09(ドム)14(ゲルググ)15(ギャン)18(ケンプファー) と各シリーズに形式番号が割り振られていました。 連邦軍の76、ジオン軍の08、10、11、・・・は欠番で 該当するMSは設定されていないんでしょうか?
- ベストアンサー
- アニメ・声優
- ガンダムvsガンダムで一番強いMSは???
ガンダムvsガンダムをやっているのですが、 私が基本的に好きなのはアムロ・シャア・カミーユ・・・と、1stガンダムとΖガンダム、0083やポケ戦なのですが、最終ステージのデビルガンダムがまだ一度も倒せていません。 シャアザクのマシンガンじゃ倒せそうもないし、ガンタンクなんて論外っぽいし、ヒイロの技は強そうだけど・・・ 一度、オーガンダム(刹那)でプレイしてみたら7本のソードが特徴なのか、ビームライフルが弱くサーベルに強いようです、となると接近戦向きなのでしょうか。 このように、各MS(キャラ)によって得意・不得意があるような気がするのですが、最終的にデビルガンダムを倒すにはどれが一番適していると思いますか? (友人はGガンダムのMSでデビルガンダムを倒したと言っていましたが・・・)
- ベストアンサー
- その他(ゲーム)
- 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
- 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」をセットさせたい
- ベストアンサー
- JavaScript
- HTMLをPHPでJSONにして返すには
jqueryでurlをPHPに送って、そのurlのhtmlファイルから、titleタグやh1タグの内容を抽出し、連想配列に格納。そして、その連想配列をJSON形式にしてjqueryに返し、htmlにレンダリングしたいのですが上手くいきません。 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> function site_check(){ var url = $("#url").val(); if(url=="") return; $.getJSON("test.php?url=" + encodeURIComponent(url) ,function(res){ $("#title").html(res.title); $("#h1").html(res.h1); }); } </script> </head> <body> <div class="form"> URL <input type="text" id="url" value="" style="width:300px;" onfocus="this.select()" onkeypress="if(event.keyCode==13) site_check()" /> <button onclick="site_check()" />チェック</button> </div> title:<span id="title"></span></br> h1:<span id="h1"></span> </body> test.php↓ <?php $html=mb_convert_encoding(file_get_contents($_GET['url']), 'UTF-8', 'auto'); $array = array(); $pattern = "/(?<=<title>).+?(?=<\/title>)/mis"; preg_match($pattern,$html,$array['title']); $pattern = "/(?<=<h1>).+?(?=<\/h1>)/mis"; preg_match($pattern,$html,$array['h1']); header("Content-Type: application/json; charset=UTF-8"); echo json_encode($array); ?> このコードだと、test.phpからは、[object Object]と、レスポンスが返ってきてしまいます。
- ベストアンサー
- PHP
- シャアってなんで途中でいなくなったの?
初代ガンダムについてですが。 劇中の話だと「ガルマを守りきれなかったので軍から失脚したが、キシリアが拾い上げて自分の配下においた」って話になっているのですが、演出とかでいったん消した、とかないんですかね? たとえば、 シャアザクが赤い理由: 建て前:「指揮官が目立つ色のMSに乗り戦場の最前線に立つことにより味方の士気があがるから」 「わざと目立つ色のMSに乗ることにより、自分のMS操縦技術の熟練具合を敵味方にアピールしている」 本音 :「当時、ピンク色の絵の具がサンライズに大量に余っていたため、それを消化するためにシャアザクをピンク色に設定した」 ガンダムが合体する理由: 建て前:「コアブロックシステムを搭載することにより、パイロットの生還率がうんたら」 「コアブロックシステムを搭載することにより、パーツ単位での交換が可能になり機種のバリエーションがうんたら」 本音 :「番組のスポンサーになってくれるおもちゃメーカーからの要請で、『合体』か『変形』かいずれかのギミックを入れて欲しいとの要望に答えたため」 みたいな話です。 とりあえず自分がパッと思いつく、シャアが途中で消えた理由は「ランバ・ラルや黒い三連星といった、シャアの後に出るライバルたちをより目立つようにさせるため」、というものなのですが。 それとも本当にストーリー上、シャアはいったん消える必要があったのでしょうか?絶対?リアルさに拘ったからとかで? それまでのアニメの主人公のライバルといえば番組冒頭から終わりまで、ずーっと出ずっぱりだったため、シャアが作品途中でいったん消えたことは新鮮というより違和感を感じていました。 できれば雑誌の対談とかで、富野監督がこれこれこういう理由のためだって言ってたよーってご存知の方、教えてください。
- ベストアンサー
- アニメ・声優
- 【PHP,JavaScript】文字が誤変換される
以下は、プログラムの一部でJavaScriptからPHPにJSONデータを送信する処理です。 引数を渡すJavaScript側(Extjsライブラリを利用)のプログラム // Ajaxリクエスト処理 Ext.Ajax.request({ url: "php/updatedata.php", success: handleSuccess, failure: handleFailure, params: { data: Ext.util.JSON.encode(data) } // パラメータをJSON形式にして送信 }); 配列dataの中身は「data[0] = 3,data[1] = パソコン」となっています。 Ext.util.JSON.encode(data)により配列dataをJSONに変換して 受信するPHP側のプログラム:updatedata.php JavaScriptで渡したJSONを$_REQUEST['data']で受信して中身を見ると以下のようになっています。 if (isset($_REQUEST['data'])) { $tmp = $_REQUEST['data']; 【受信したJSONデータの中身】 [{"id":"3","name":"繝代た繧ウ繝ウ"}] 「パソコン」という文字列が「繝代た繧ウ繝ウ」という文字列に変換されてしまっています。 Extjs側の「Ext.util.JSON.encode」が悪いのでしょうか、それともPHP側の「$_REQUEST」が悪いのでしょうか。はたまた何か別の原因があるのでしょうか。 ちなみに、環境は以下のようになっています。 WindowsXP,Windows7(両方とも同じ結果になってしまいました。) PHP5.3.1 Ext3.3.0 以上、よろしくお願い致します。
- ベストアンサー
- JavaScript
- ガンダムのニュータイプVSエグザムシステム
機動戦士ガンダムシリーズに出てくるニュータイプパイロットには 普通ではオールドタイプパイロットにとても勝ち目がないように思いますが、 ややマイナー系の脇役的存在でもそれなりの腕のパイロットはたくさんいます。 たとえばジオニックフロントのガンキャノン隊のエイガーや フェンリル隊の女性パイロットのソフィ、MS小隊のシロー、テストパイロットの クリスチーナマッケンジー、戦記のラリー少尉やアニッシュ曹長とかです。 これらの方々が「エグザムシステム」を搭載したブルーデスティニーなんかに 搭乗してアムロガンダムなんかと戦った場合、勝率は10戦中何勝くらい すると考えられるでしょうか? エグザムシステムそのものは、ある少女の戦闘データのコピーらしいので その少女パイロット以上の動きは出来ないとは思いますが。 あとエグザムシステムとはパイロットの性格や考え方、戦術とかはいっさい関係なく 誰でも完全平等の効果が期待できるものなのでしょうか?
- ベストアンサー
- アニメ・声優
- 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データを受け取る前にカラム名を別処理で取得して格納しています。 ご教授の程よろしくお願いします。
- ベストアンサー
- JavaScript
お礼
ありがとうございます! 3つの変数を配列化して、tempに格納。 オブジェクト、oを定義。 変数msの数を取得。 その数分ループして、都度m、p、cの変数に格納し、 最後にオブジェクトoにまとめる。 という感じだと思うのですが、 とてもこれを書くスキルは自分にはありませんでした。 あらためて解析して、把握します。 この度は終始ご丁寧な対応を賜り、本当にありがとうございました。 大変為になりました。