XMLをJSONに変換するサービスやプログラムをJSONで書くなど、最近JSONというのを見かけます。

XMLと似ているようなのですが、どう違うのですか?

・JSONを使う理由&使わない理由
・それでもXMLを使う理由&使わない理由
・JSONを勉強するために参考になるHPや本

それぞれのメリットや使い道など書いてください。
参考になるものがあったら、それもお願いします。

※y-kawazさんとmatsu-booleanさん
 ポイントをあげる方法がわからないので回答してください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/10/22 01:39:44
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:matsu-boolean No.1

回答回数43ベストアンサー獲得回数7

ポイント40pt

 JSON はJavaScript(ECMAScript)でオブジェクトを表す式そのものです。なので、HTTPレスポンスの文字列をそのままeval関数で解釈すればそのままJavaScriptで利用可能になります。読みやすいし、使いやすいので最近よく見かけるのですね。

 欠点としてはセキュリティ上の問題として、eval関数を使って解析すると、HTTPレスポンスとして渡された文字列に悪意のあるコードを埋め込めてしまうということです。このため信頼できるサイトからのHTTPレスポンス以外解釈しないようにするか、JSONを解釈できるJavaScriptのライブラリを使って解釈することになります。手軽に利用できるのがJSONの強みなのに後者の解決法ではなんだか本末転倒ですね。

 あとは、受け取り側(クライアント側)がJavaScript(ECMAScript)でない場合、やはりパーサーを用意しないといけないということで、XMLと比べてメリットが無いことになってしまいます。

 そんなところだと思います。

…と、ここまでは前回も書いたのですがついでに、

実は自分のホームページでもJSON使ってます。

http://www.wind.sannet.ne.jp/m_matsu/index.html や、その他ページにアクセスすると、右上に「-- こちらのページもどうぞ --」とプルダウンを出しています。ページ構成が変わったときに全てのページを修正して回るのがいやなので、JSONを使って一括で変更できるようにしています。まあ、無理にJSON化する必要も無かったかもしれませんが…。

各ページには"slPageList"のIDを持つ<select>タグがあります。アクセスすると、

1.http://www.wind.sannet.ne.jp/m_matsu/js/changePage.js の中の、slPageList_init()が呼び出されます。

2.prototype.jsのAjax.Request()を使い、http://www.wind.sannet.ne.jp/m_matsu/pageList.txtを読み込みます。

3.Ajax.Request()のonComplateイベントで、レスポンスの文字列を eval()で処理してJSON表現からJavaScriptのオブジェクトへ変換します。

4.受け取ったオブジェクトからslPageListの<select>タグに<option>タグを追加していきます。

一般的には http://www.wind.sannet.ne.jp/m_matsu/pageList.txt の部分をサーブレットやPHPを使って動的に生成するのですね。今回のページでは単なる静的なテキストファイルです。

evalの引数としてHttpレスポンスを渡すときにカッコでくくってやるのがミソらしいです。自分もちょっと悩みました。

 こんな感じ → var responseObj = eval("(" + httpObj.responseText + ")");

id:farusan

前回に続きありがとうございます

2007/10/18 00:24:48

その他の回答2件)

id:matsu-boolean No.1

回答回数43ベストアンサー獲得回数7ここでベストアンサー

ポイント40pt

 JSON はJavaScript(ECMAScript)でオブジェクトを表す式そのものです。なので、HTTPレスポンスの文字列をそのままeval関数で解釈すればそのままJavaScriptで利用可能になります。読みやすいし、使いやすいので最近よく見かけるのですね。

 欠点としてはセキュリティ上の問題として、eval関数を使って解析すると、HTTPレスポンスとして渡された文字列に悪意のあるコードを埋め込めてしまうということです。このため信頼できるサイトからのHTTPレスポンス以外解釈しないようにするか、JSONを解釈できるJavaScriptのライブラリを使って解釈することになります。手軽に利用できるのがJSONの強みなのに後者の解決法ではなんだか本末転倒ですね。

 あとは、受け取り側(クライアント側)がJavaScript(ECMAScript)でない場合、やはりパーサーを用意しないといけないということで、XMLと比べてメリットが無いことになってしまいます。

 そんなところだと思います。

…と、ここまでは前回も書いたのですがついでに、

実は自分のホームページでもJSON使ってます。

http://www.wind.sannet.ne.jp/m_matsu/index.html や、その他ページにアクセスすると、右上に「-- こちらのページもどうぞ --」とプルダウンを出しています。ページ構成が変わったときに全てのページを修正して回るのがいやなので、JSONを使って一括で変更できるようにしています。まあ、無理にJSON化する必要も無かったかもしれませんが…。

各ページには"slPageList"のIDを持つ<select>タグがあります。アクセスすると、

1.http://www.wind.sannet.ne.jp/m_matsu/js/changePage.js の中の、slPageList_init()が呼び出されます。

2.prototype.jsのAjax.Request()を使い、http://www.wind.sannet.ne.jp/m_matsu/pageList.txtを読み込みます。

3.Ajax.Request()のonComplateイベントで、レスポンスの文字列を eval()で処理してJSON表現からJavaScriptのオブジェクトへ変換します。

4.受け取ったオブジェクトからslPageListの<select>タグに<option>タグを追加していきます。

一般的には http://www.wind.sannet.ne.jp/m_matsu/pageList.txt の部分をサーブレットやPHPを使って動的に生成するのですね。今回のページでは単なる静的なテキストファイルです。

evalの引数としてHttpレスポンスを渡すときにカッコでくくってやるのがミソらしいです。自分もちょっと悩みました。

 こんな感じ → var responseObj = eval("(" + httpObj.responseText + ")");

id:farusan

前回に続きありがとうございます

2007/10/18 00:24:48
id:y-kawaz No.2

回答回数1422ベストアンサー獲得回数226

ポイント20pt

いわしでの質問の件ですね、律儀にありがとうございます(^-^;

http://q.hatena.ne.jp/1192284151/121234/#i121234

id:farusan

いえいえ、あんなに書いてもらったのに1ポイントでは。

2007/10/18 00:26:05
id:paraizo No.3

回答回数139ベストアンサー獲得回数10

ポイント20pt

JSONは文法がJavaScript風なのでJavaScriptおよびその派生言語の場合パースが簡単です、極端な話そのデータがクリーンであればeval()だけで読み込むことが出来ます。

またXMLよりは表記が簡単なので人間にとって読み書きしやすいと思います

XMLはエディタが豊富、スキーマ定義によってそれ自体に意味を持たせることが容易。

XML-RPCなどでは必須

XSLTなどの周辺技術が豊富などのメリットがあると思います。

とりあえず入門ページを貼り付けておきます

http://www.baldanders.info/spiegel/remark/archives/000171.shtml

また似たような技術としてはYAMLがあげられます

id:farusan

ありがとうございます。

2007/10/18 00:27:21

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません
${title} {{if price }}
${price}円
{{/if}}