web-dev-qa-db-ja.com

ajaxリクエストに対するjsonとxmlの長所と短所は何ですか?

Ajaxリクエストに対するjsonとxmlの長所と短所は何ですか?パフォーマンスに違いはありますか?つまり、ブラウザは一方の形式をもう一方の形式よりも速く処理できますか?

17
flybywire

要約すると、JSON(JavaScriptのサブセットと考えることができます)はXMLよりもはるかにスリムです。これにはいくつかのプラスの副作用があります

  • JSONは対応するXMLよりも小さい
  • JSONの方が高速です。つまり、構文が単純です->解析が簡単です(解析が高速です)

この質問に対する私の最初の回答では、JSONの見方はJavaScriptの見方であり、近親者であると考えていました。しかし、JSONは独立したものであり、 JSON.org はJSONを記述するのに優れた仕事をします。また、ブラウザでサポートされていない場合にJSON.parseJSON.stringifyのサポートを追加するJavaScriptの互換性ライブラリも提供します。

当時(2009年半ば)のevalはJavaScriptの評価に使用されていましたが、JSONの評価、つまりJSONの解析も可能でしたが、代わりに任意のJavaScriptを実行できるため、安全ではないと見なされていました。

JSONは、JavaScriptとの密接な関係により、ブラウザーに非常によく適合し、プラットフォームを進化させる自然な方法です。

XMLは、入力できるため、より厳密であると見なされる可能性がありますが、XMLを非常に遅くする原因でもあります(私の意見では少し冗長です)。しかし、これが本当に必要なものである場合は、それを使用する必要があります。XMLも同様にユビキタスです。

動的または静的に型付けされたものについては議論しませんが、これを言います。スキーマのないデータの上にデータを追加するのは本当に簡単で、スキーマの有無に関係なく、検証を行う方法はたくさんあります。

17
John Leidegren

議論の中で私が見たことがないXMLの利点の1つは、XMLがスキーマを持つことができるということです。これは、XMLの構造を説明する上で非常に価値があります。単純なデータ構造の場合、JSONと実行内容を説明するテキストがあれば問題ありません。より複雑なデータ構造で作業する場合、またはデータの作成者と利用者が同じチームではない場合、スキーマを持つことはコミュニケーションに大いに役立ちます。

また、スキーマがあるということは、データを検証できることを意味します。これは、複雑なエラーをデバッグしようとするときに命を救うことができます...

17
Guillaume

この記事には「AJAX応答:XML、HTML、またはJSON? "そのトピックに関する完全な議論:

[〜#〜] xml [〜#〜]

  • 利点
    XMLの最も重要な利点は、他の人間にとって最も読みやすい形式であることです。
    二次的な利点は、XMLがかなり前から存在していて、多くの開発者がすでにそれに慣れていることです。
  • デメリット
    データをHTMLページに挿入するために必要なJavaScriptは非常に冗長です。

[〜#〜] json [〜#〜]

  • 利点
    最も重要な利点は、JSONファイルを新しい<script>タグとしてインポートすると、JSONがJavaScriptの同一生成元ポリシーを回避することです。残酷な詳細については、 Simon Willisonの例 を参照してください。
    JavaScriptでは、別のサーバーからのドキュメント(XMLまたはHTML)にアクセスすることはできません。ただし、JSONファイルをスクリプトタグとしてインポートすると、この問題を回避でき、任意のJSONデータを任意のWebサイトにインポートできます。これが良いことか悪いことかはビジネスの目標によって異なりますが、現時点では、無制限のアクセスを許可する唯一のデータ形式です。
    [。
  • デメリット
    JSONの最も重要な欠点は、フォーマットが人間にとって非常に読みにくいことです。もちろん、すべてのコンマ、引用符、角かっこは正確に正しい場所に配置する必要があります。これはXMLにも当てはまりますが、データスニペットの最後にある}}]}のような複雑に見える構文のJSONのウェルターは、初心者を怖がらせ、複雑なデバッグを引き起こす可能性があります。

コメントから、JSONはXMLよりも処理が速いと考えられています。

8
VonC

まだ言及されていないXMLの利点の1つは、XSLTを使用して、任意の複雑なXPath式を使用してXMLドキュメントからデータを抽出できることです。 JSONでこれを行う方法がわかりません。オブジェクトが構造内のどこにあるかに関係なく、直接の子孫として「通貨」フィールドを含むJSONドキュメント内のすべてのオブジェクトをどのように見つけますか? XSLT/XPathを使用したXMLでは、これは非常に簡単です。

ただし、ブラウザでこれを行うにはコストがかかります。ブラウザ固有の癖に遭遇し、おそらく遅くなり、メモリを大量に消費します。

5
KarstenF

私はJsonが好きでお勧めしますが、最適な処理速度に根本的な違いはないと思います。ライブラリとプラットフォームの違いはより重要です。良いxmlパーサーは悪いjsonパーサーよりも高速であり、その逆も同様です。したがって、通常、フォーマット自体のパフォーマンスは大きな要因ではありません。どちらも高速に点灯する可能性があります(Javaには、両方に適したパーサーがいくつかあります。たとえば、他の言語もおそらくそうです)。

データのタイプに依存するコンパクトさに関しては、Jsonは多くの場合、少しコンパクトですが、根本的にはそうではありません。配列/リストがたくさんある場合を除いて、json表記 "{...}"はxmlタグ付けよりもはるかにコンパクトです(可能であれば "1 2 3 4"のように空白を使用しない限り)。

2
StaxMan

JSON:XMLの無脂肪代替 をお読みください。 JSONを使用すると、リクエストの送信元と宛先の間でコールバックを行ったり来たりして、既存のJavascriptコードで実際に問題なく使用できます。

1
dirkgently

ひどく提供するリンクには、違いの良い概要があります(一番下までスクロールしてください)。重要なポイントは次のとおりです。

JSON:小さく、すべてのUnicode文字を表すことができます(少なくとも、xmlは独自の仕様ではUTF8にはできません)。 AJAXアプリケーション(javascriptのeval()関数のため)、特にjsonp(応答がコールバックを呼び出す)のようなより高度な機能でそれを利用することも簡単です。

XML:構造のクエリを簡単にするためのツールがたくさんあります。その古くて確立されているので、それはまた一般により多くのツールサポートを持っています。

一般に、それらは同じことを実行できます(xmlを介してjsonpを実行できますが、コールバックを手動で解析する必要があります)。

1

JSONは軽量AJAXフレンドリー(Javascriptのサブセットと見なされます)および簡単にシリアル化可能です。 [〜#〜] xml [〜#〜]これをすべて行いますが、牛乳を飲んだ後です。

0
BitByte_Bake

jsonのもう1つの利点は、<>角かっこを使用せず、多くの混乱なしにhtmlコードを挿入できることだと思います。

0
Trio Cheung