• 締切済み

javascriptでJSONデータの生成方法

現在PerlのフレームワークであるMojoliciousとJavascriptのjQueryを使ってAjaxを利用したアプリケーションを作ろうとしているのですが、クライアント側で、サーバに送信するためのJSON形式のデータがうまく作れません。 例えば、ブラウザ上の表のセルをダブルクリックしたときにそのデータを書き換えられるようにし、その更新データをJSONでサーバ側に送りたいのですが、 <table> <tr><th>name</th><th>email</th></tr> <tr><td class="name">山田</td><td class="email">yamada**@gmail.com</td></tr> </table> とある表のセルの山田のアドレスをyamada**@gmail.com -> yamada**@yahoo.co.jpと変更した場合、javascript(jQuery)で次のようなJSONデータを作りたいです。 { "email" : "yamada**@yahoo.co.jp"} 左側のemailは動的にセルのclass属性から取得したいのですが、方法が分かりません。 実際にはemail以外にも多数の列がありますので、なるべく動的にclass属性を取得したいのですが、良いJSONの生成方法やJSONを用いた他のデータ構造があれば教えていただきたいです。

  • AJAX
  • 回答数4
  • ありがとう数2

みんなの回答

回答No.4

>ANo.3 すみません、ダブルクォーテーションとシングルクォーテーションの対応が間違ってますが、 適宜調整して下さい。

回答No.3

JavaScriptオブジェクトをJSON形式でダンプするライブラリとか、 (No.1、No.2で紹介されているのもこのタイプだと思います) XMLデータを{タグ名:ノードバリュー}に対応させたJavaScriptオブジェクトに変換するライブラリは多いですが、 それ以前の処理、 つまりclassなどからオブジェクトを生成したり、JSONに変換するという独自ルールを使うなら、 自分でオブジェクトに変換したり、JSONで出力しないとダメなのでは? ----------- var property='email'; var json='{"'+ property + '": "' + document.getElementsByClassName(property)[0] + '"}'; alert(json); ----------- var property='email'; var object={}; object[property]=document.getElementsByClassName(property)[0]; /*** objectをjsonにダンプするライブラリを使用して下さい ***/ var dump=ライブラリ関数(object); alert(dump); ------------ なお、classは複数存在させることが可能ですので、 <td class="email">・・・</td> <td class="email">・・・</td> となっている場合でも、1つめのemailしか取得できないようにしています。 もし全部を取得するのであれば、 配列にするなど、何らかの処理を施す必要がありますが、 HTMLドキュメントのフォーマットなどに合わせて調整してみてください。

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

JSON.stringify は ES5 で標準化されたので最近のブラウザなら使用可能です。 http://es5.github.com/#x15.12.3 未対応ブラウザには json2.js を適用すれば対応できます。 http://json.org/js.html 他の手段としては CSV に変換しても良さそうです。 http://codezine.jp/article/detail/2364 http://www.ietf.org/rfc/rfc4180.txt "name","email" "山田","yamada**@gmail.com" "佐藤","satou**@gmail.com"

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

IEのJscriptでサポートしてるかどうか調べてませんが、 javascript1.7から  var str = JSON.stringify(value[, replacer [, space]]); というメソッドがあります。使えそうですね (参考) https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify というより、やっぱりサーバー側でJSONデータに組み立てたほうがよいかな。 ※GETやPOSTで送れるのは文字列です。マルチパートでバイナリーファイルも送れますが...

関連するQ&A

  • 2つのテーブルの幅を一致させたい

    以下のHTMLで、2つのテーブルのセル幅が一致しません。 JavaScriptではヘッダのセル幅をボディのセル幅に合わせています。 ボディ部分の文字列をすべて日本語にするとうまくいくのですが・・・ JavaScriptというよりはHtmlの問題な気がしますが、よろしくお願いします。 jqueryを使用しています。 <html> <head> <script src="js/jquery.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () { headerTableWidthFit(); }); $( window ).resize(function(){ headerTableWidthFit(); }); function headerTableWidthFit() { var i = 0; $('#resultBodyTable table tbody tr:eq(0) td').each(function() { $('#resultHeaderTable table th').eq(i).width($(this).width()); i++; }); } </script> </head> <body> <div id="container"> <div id="resultHeaderTable" class="headerTable"> <table border="1" cellspacing="0" cellpadding="0"> <thead> <tr> <th>あ</th> <th>い</th> <th>う</th> <th>え</th> <th>お</th> <th>か</th> <th>き</th> <th>く</th> </tr> </thead> </table> </div> <div id="resultBodyTable" class="bodyTable"> <table border="1" cellspacing="0" cellpadding="0" width="100%"> <thead> </thead> <tbody> <tr> <td>あaaaaaa</td> <td>い</td> <td>う</td> <td>え</td> <td>お</td> <td>か</td> <td>き</td> <td>く</td> </tr> </tbody> </table> </div> </div> </body> </html>

  • アルゴリズムがわからない

    データベースから値を取得するコードを作っているのですがアルゴリズムがよくわからなくて困っています。 class name _____ A   山田 A   鈴木 A   高橋 B   佐藤  C   山本 C   田中 _____ というデータからブラウザへ <table><tr> <th>A</th><td>山田</td><td>鈴木</td><td>高橋</td> </tr></table> <table><tr> <th>B</th><td>佐藤</td> </tr></table> <table><tr> <th>C</th><td>山本</td><td>田中</td> </tr></table> というふうに出力したいんですがよい方法を教えてください。

  • tdタグに何も入れなくとも幅を均一にする方法

    <table border = "1"> <tr> <th>hoge</th> <td></td> </tr> </table> 上記のような場合、<td>タグ内には何も書かれてないので セルがつぶされた形で表示されますよね? これを<th>タグ内のhogeと同じセルの幅で表示するにはどうすればいいですか? style属性にwidth:100pxとかしてみたのですが無駄でした‥

    • ベストアンサー
    • HTML
  • JavaScriptで特定のtdタグにclass名をつけたい

    指定のdiv内にある一行目(もしくは、最初の3つ)のtdタグに対して JavaScriptでClass名を付けたいのですが、どのようにすればよいでしょうか? 【HTML参考】 <div id="box"> <table> <tr> <td>セル1</td> <td>セル2</td> <td>セル3</td> </tr> <tr> <td>セル4</td> <td>セル5</td> <td>セル6</td> </tr> </table> </div> 上記のような時、div#box内の「セル1~3」に対してclass名を付けたいと言った場合です。 よろしくお願いいたします。

  • Jqueryでのテーブル背景色設定について

    お世話になります。 CSSとJavascriptどちらで投稿しようか考えたのですが、Jqueryを使用しているのでこちらに質問させていただきました。 ブラウザはIE8を使用しています。 今回 <table class="list"> <tr><th></th></tr> <tr><td></td></tr> . . . <tr><td></td><tr> </tr> このようなテーブルを作りセルの背景色一行ごとに変えたいと思いJqueryで $(function(){ $('table.list tr:even').addClass("linecolor"); }); というスクリプトを作ったのですが反映されません。 CSSは .linecolor{ background#FFFFC4;} としてます。 原因を探ったのですが、いくつかのサイトを見てもこの書き方で問題ないように思います。 試験的にロジックを替えスクリプトの"tr"を"td"と書き換えるとスタイルが適応され、 <tr> => <tr class="linecolor>"としてもスタイルが適応されませんでした。 このことから個人的な結論としてはIE8では<tr>指定でスタイル等を適応させることができないのではないかと思いました。 本当に<tr>にスタイルを適応させることはできないのでしょうか。 また、Jqueryを用いた対処方法があれば教えていただきたいです。 お手数ですが、アドバイスをお願いいたします。

  • JavaScript+ASPによるaccessのデータの追加、削除

    JavascriptでASP(IIS)を使ってAccess2000にあるデータをブラウザに表示する事はできたのですが、今度はaccessにあるデータを追加、削除したいのですが、SQLを変えてもエラーがでます。 どのようにしたらいいですか?教えてください。 初心者なもんで、質問が分かりにくいと思いますが、お許しください。どうぞ、よろしくお願いします。 <%@Language="JavaScript" %> <html> <head> <title>一覧→詳細</title> </head> <body> <table border="1"> <tr> <th>商品コード</th><th>商品名</th><th>価格</th> </tr> <% var db=new ActiveXobject("ADODB.Connection"); db.Open("Webware"); var rs=db.Execute("SELECT * FROM products"); while(!rs.EOF){ %> <tr> <td><a href="descj.asp?id=<%=Server.URLEncode(rs("id"))%>"> <%rs("id")%></a></td> <td><%=rs("nam")%></td> <td><%="\\" + rs("val") %></td> </tr> <% rs.MoveNext(); } %> </table> </body> </html>

  • WEB上の表でソートするためのJavaScript

    WEB上の表でソートするためのJavaScript 下記のHTMLのソースではTableを用いた表を作成していますが、 番号、名前、クラス、クラブの項目をWEB上でソートできる JavaScriptを教えて欲しいのです。 下記ソースの表では、番号順に並べていますが、名前順や、クラス順、 クラブ順に並べ変えたいのです。 ただ、これが表示は1列ではなくの3列に分けて表示したいのです。 3列でそれぞれソートするのではなく、3つの列を1つの連続した列 としてソートしたいのです。 ですから、ソートを実行するためのボタンは、各列には必要なく、左端の列の 各項目をボタンにできればと思っています。 どうぞよろしくお願い致します。 <table border="3"> <TR> <TD> <TABLE border="1" > <TR> <Th>番号</Th><Th>名前</Th><Th>クラス</Th><Th>クラブ</Th> </TR> <TR> <TD>1</TD><TD>ヤマダ</TD><TD>A</TD><TD>水泳</TD> </TR> <TR> <TD>2</TD><TD>タナカ</TD><TD>C</TD><TD>野球</TD> </TR> <TR> <TD>3</TD><TD>サトウ</TD><TD>E</TD><TD>水泳</TD> </TR> <TR> <TD>4</TD><TD>スズキ</TD><TD>D</TD><TD>茶道</TD> </TR> </TABLE> </TD> <TD> <TABLE border="1" > <TR> <Th>番号</Th><Th>名前</Th><Th>クラス</Th><Th>クラブ</Th> </TR> <TR> <TD>5</TD><TD>ワタナベ</TD><TD>B</TD><TD>バレー</TD> </TR> <TR> <TD>6</TD><TD>イトウ</TD><TD>C</TD><TD>水泳</TD> </TR> <TR> <TD>7</TD><TD>キムラ</TD><TD>A</TD><TD>柔道</TD> </TR> <TR> <TD>8</TD><TD>イシダ</TD><TD>B</TD><TD>卓球</TD> </TR> </TABLE> </TD> <TD> <TABLE border="1" > <TR> <Th>番号</Th><Th>名前</Th><Th>クラス</Th><Th>クラブ</Th> </TR> <TR> <TD>9</TD><TD>ワダ</TD><TD>C</TD><TD>卓球</TD> </TR> <TR> <TD>10</TD><TD>タダ</TD><TD>D</TD><TD>柔道</TD> </TR> <TR> <TD>11</TD><TD>ミキ</TD><TD>E</TD><TD>野球</TD> </TR> <TR> <TD>12</TD><TD>ハナダ</TD><TD>A</TD><TD>水泳</TD> </TR> </TABLE> </TD> </TR> </table>

  • jqueryでどうやってエスケープ?

    <table border> <tbody> <tr><th>名前</th><th>学年</th><th>評価</th></tr> <tr><td>山田</td><td>1年</td><td>A</td></tr> <!-- ここにエスケープしてappendしていきたい。 --!> </tbody> </table> はじめまして。 上記のようなテーブルがあり、ここに新しく <tr><td>鈴木</td><td>2年</td><td>B</td></tr>をエスケープしてjqueryで追加していきたい場合、一般的にどのように書けば良いのでしょうか? エスケープせず追加するのなら、 $("table").append("<tr><td>鈴木</td><td>2年</td><td>B</td></tr>"); と書けば良いかと思いますが、エスケープしながら追加していく方法がわかりません。 わかる方、宜しくお願い致します。

  • data-hrefでのcolorbox設定方法

    かなり調べてみたのですが解決方法がわからなく、ご教授頂けると幸いです。 まず、テーブル行を全体をリンク(クリック)できるように設定しています。 jQueryは下記のような感じで設定しています。 =============================== $(function() { $('.list tr[data-href]').addClass('clickable') .click(function(e) { if(!$(e.target).is('a')){ window.location = $(e.target).closest('tr').data('href');} }); }); =============================== そしてリストの各行をクリックすると、ColorboxにてInlineフレームを表示したく下記の様に記載しました。 =============================== <table class="list"> <tr class="inline" data-href="#inline_content"> <th>タイトル</th> <td>説明</td> <td>日付</td> </tr> <tr class="inline" data-href="#inline_content"> <th>タイトル</th> <td>説明</td> <td>日付</td> </tr> <tr class="inline" data-href="#inline_content"> <th>タイトル</th> <td>説明</td> <td>日付</td> </tr> </table> =============================== Colorboxの記述は下記になります。 =============================== $(document).ready(function(){ $(".inline").colorbox({inline:true, width:"350px", height:"300px"}); }); =============================== これだと、Colorbox自体は作動するのですが、真っ黒で中身が表示されず指定サイズの枠のみ出てきます。 通常のColorbox設定では<a class="inline" href="#inline_content">テキスト</a>と記述し、こちらをテーブル以外の場所のテキストにリンクするときちんと作動します。 という事は<a ~></a>という形で設定していないから、という事はわかるのですが tr自体につけた【data-href="#inline_content"】にはどのように設定すれば良いでしょうか? $(".list tr[data-href].inline").colorbox({inline:true, width:"350px", height:"300px"}); $(".list tr.inline[data-href]").colorbox({inline:true, width:"350px", height:"300px"}); なども試しましたがダメでした。 海外サイトでの記述等もかなり調べてみたのですが Colorboxでdata-hrefと併用している例が見つけられず、いきづまってしまいました。 ご教授頂けますと幸いです。 どうぞ宜しくお願い致します。

  • テーブルを壊さない方法を

    知れたいのですが教えてください <table> <tr><th>a</th><th>b</th><th>c</th><th>d</th></tr> <tr><td>A</td><td>B</td><td>C</td><td>D</td></tr> </table> a,b,c,d,A,B,C,Dの部分が少し長いだけでセル内で折り返されてしまいます 折り返されない方法を教えてください

    • ベストアンサー
    • HTML

専門家に質問してみよう