誰もがjQueryのためにXMLよりもJSONを選択するのはなぜですか?[閉まっている]


155

XMLは移植性が高く、ミニデータベースとして使用できると思いました。XMLがどこでも使用されるのを見てきました。大企業がJSONに切り替えることすら見ています。MicrosoftもJSONのサポートを統合しています。JSONに対する誇大宣伝は何ですか?


14
「みんな」と「どこでも」は絶対的な用語です...
マシューグローブ

73
@eliben XMLは実際には不十分です。それは非常に強力ですが、ロケットランチャーでウサギを狩るように、それが常に最良の選択肢であるとは限りません。
Dan

20
人々が現在XMLを使用しているもののほとんどは、JSONのほうがよいでしょう
MGOwen

39
@ダンXMLだけがロケットランチャーでウサギを狩るのと同じくらい面白かったとしたら(おそらく-自分で試したとは言えないでしょう)
David Johnstone

4
なぜなら、「XMLに代わる無脂肪の代替手段」-json.org
DMin

回答:


226

基本的に、JSONはJavaScriptによってネイティブに認識されるため、2つの基本的な構造のみに依存しているため、軽量、ミニマリズム、移植性に優れています。

  • 名前と値のペアのコレクション。さまざまな言語では、これはオブジェクト、レコード、構造体、辞書、ハッシュテーブル、キー付きリスト、または連想配列として実現されます。
  • 値の順序付きリスト。ほとんどの言語では、これは配列、ベクトル、リスト、またはシーケンスとして実現されます。

3
+1 ..本当に..非常に多くの異なるデータ型のサポートは、未加工のxmlテキストに比べて
非常に重要

48
+1。特に、JSON解析は、XML解析に比べて信じられないほど効率的です。気になるデータセットが特定の(そして恐ろしく小さい)しきい値を超えると、パフォーマンスの違いが顕著になります。
Magsol 2009年

1
最近のブラウザでは、JSON解析はXMLよりも速いというデータを誰かが見せてくれました。SOの答えはここにそう言う: stackoverflow.com/questions/4596465/...
HDave

136

XMLは、さまざまな名前空間のスキーマを一緒に混ぜ始めるまで実際には輝き始めません。次に、JSONが落ち始めますが、データのシリアル化フォーマットが必要なだけの場合、JSONはXMLよりも小さく、軽量で、人間が読みやすく、一般的に高速です。


31
+1は、XMLが本当に役立つものを示します。非常に単純なものでうまくいく場合でも、XMLを使用することがよくあります。
ダニエルプライデン2009年

1
ここではjcdとDanielに同意する必要があります。XMLがいくつかの点でまだかなり優れている理由についての質の高い応答。
既知の市民2010年

3
どのようにXMLの可読性が低下するのか、XMLの階層がはるかに理解しやすいと思う場所でjsonを読むことはほとんど不可能です(確かに少し冗長です)。おそらく、JSONで十分に作業できなかっただけかもしれません
Colton

名前空間は、XMLで物事を行うときの特定の問題を解決するためのxmlソリューションです。jsonを使用している場合は、jsonソリューションを見つけて、jsonの方法で同じ問題を解決します。私にとって、名前空間の引数は「ああ!しかし、jsonには属性がない!」
redben 2013年

61

XMLではなくJSONの大きな利点は、データのフォーマット方法を決定する必要がないことです。一部の人が示したように、要素や属性値など、XMLで単純なデータ構造を実行する方法は多数あります。次に、それを文書化し、XMLスキーマを作成するか、リラックスNGまたはその他いくつかのがらくたする必要があります...混乱。

XMLにはメリットがあるかもしれませんが、基本的なデータ交換については、JSONははるかにコンパクトで直接的なものです。Python開発者として、JSONとPythonの単純なデータ型の間にインピーダンスの不一致はありません。したがって、特定のスキーリゾートの雪の状態について尋ねるAJAXクエリのサーバー側ハンドラーを作成している場合は、次のような辞書を作成します。

conditions = {
    'new_snow_24': 5.0,
    'new_snow_48': 8.5,
    'base_depth': 88.0,
    'comments': 'Deep and steep!',
    'chains_required': True,
}
return simplejson.dumps(conditions)   # Encode and dump `conditions` as a JSON string

JSONを介して(Pythonの「simplejson」のようなライブラリを使用して)変換すると、結果のJSON構造はほとんど同じに見えます(JSONを除き、ブール値は小文字になります)。

その構造のデコードには、それがネイティブiPhoneアプリ、C#、またはPythonクライアントのJavascriptまたはObjective-Cのいずれであっても、JSONパーサーのみが必要です。浮動小数点数は浮動小数点数、文字列は文字列、ブール値はブール値として解釈されます。Pythonで 'simplejson'ライブラリを使用すると、simplejson.loads(some_json_string)ステートメントにより、上記の例で作成したような完全なデータ構造が返されます。

XMLを作成した場合、要素と属性のどちらを実行するかを決定する必要があります。以下の両方が有効です。

<conditions>
    <new-snow-24>5</new-snow-24>
    <new-snow-48>8.5</new-snow-48>
    <chains-required>yes</chains-required>
    <comments>deep and steep!</comments>
</conditions>

<conditions newSnow24="5" newSnow48="8.5" chainsRequired="yes">
   <comments>deep and steep!</comments>
</conditions>

したがって、クライアントに送信する可能性のあるデータについて考慮する必要があるだけでなく、データのフォーマット方法についても考慮する必要があります。XMLは、ルールに厳密であるため、プレーンなSGMLよりもシンプルですが、そのデータについて考える方法が多すぎます。それから私はそれを生成しなければならないでしょう。Pythonディクショナリ(または他の単純なデータ構造)を使用して、「自分のXMLを作成する」と言うことはできませんでした。カスタムパーサーを作成したり、XML Schema / Relax NGの追加のオーバーヘッドや他のそのような苦痛を必要としたりせずに、XMLドキュメントを受け取ってすぐに「オブジェクトとデータ構造に取り掛かる」と言うことはできませんでした。

それが不足しているのは、データをJSONにエンコードおよびデコードすること、特に迅速な交換を行うことの方がはるかに簡単で直接的なことです。JavaScript / JSONに組み込まれた基本的なデータ型(リスト、辞書など)は、Python、Perl、Rubyなどの同じまたは類似のデータ型に直接マッピングされるため、これは動的言語のバックグラウンドから来た人々にさらに当てはまる可能性があります。


34

JSONのパフォーマンスは、ほとんどのユースケースでXMLと大差ありません。JSONは、深くネストされた構造にはあまり適しておらず、読みにくいので、]]]}]に遭遇し、デバッグが困難になります。


31

XMLに比べて軽量です。拡張する必要がある場合は、帯域幅要件を減らしてください。

JSONを比較する

 [
      {
           color: "red",
           value: "#f00"
      },
      {
           color: "green",
           value: "#0f0"
      },
      {
           color: "blue",
           value: "#00f"
      },
      {
           color: "cyan",
           value: "#0ff"
      },
      {
           color: "magenta",
           value: "#f0f"
      },
      {
           color: "yellow",
           value: "#ff0"
      },
      {
           color: "black",
           value: "#000"
      }
 ]

XMLへ:

 <colors>
      <color >
           <name>red</name>
           <value>#f00</value>
      </color>
      <color >
           <name>green</name>
           <value>#0f0</value>
      </color>
      <color >
           <name>blue</name>
           <value>#00f</value>
      </color>
      <color >
           <name>cyan</name>
           <value>#0ff</value>
      </color>
      <color >
           <name>magenta</name>
           <value>#f0f</value>
      </color>
      <color >
           <name>yellow</name>
           <value>#ff0</value>
      </color>
      <color >
           <name>black</name>
           <value>#000</value>
      </color>
 </colors>

23
小さいだけでなく、より人間に優しい。XMLは、人間がコンピュータのように話すのはよくない試みのように見えます。
deft_code 2009年

15
XMLは、単純な型(名前/値)の要素の代わりに属性を使用してXMLを削減することもできます
Matthew Whited

4
@マシュー:はい、しかしそれは一貫性がなく醜く見えます。また、要素の開始/終了タグも必要です。JSON(せいぜい)は、使用する必要があるタグの数を半分にします。
Ron Gejman、2009年

2
マルクの例を見てください。あなたのバージョンが彼のバージョンよりも読みやすいかはわかりません。stackoverflow.com/questions/1743532/...
マシュー白く塗った

1
違いは、長さが私にはそれほど大きくないようです
vtd-xml-author '19 / 11/19

28

私自身の個人的な経験からの逸話:

最初にXMLのデータを使用して小さなJavascriptディレクトリを作成し、次にそれをJSONを使用するように適合させて、それらを並べて実行し、Firebugと速度を比較できるようにしました。JSONは約3倍高速になりました(すべてのデータを表示するために、350〜400ミリ秒対1200〜1300ミリ秒)。また、他の人が指摘しているように、JSONは見た目がはるかに簡単で、ファイルサイズは無駄のないマークアップにより25%小さくなりました。


2
誰もがこれらのベンチマークを作成したとしても、議論の余地はありません。
HDave

20
 <colors>
      <color name='red'     value='#f00'/>
      <color name='green'   value='#0f0'/>
      <color name='blue'    value='#00f'/>
      <color name='cyan'    value='#0ff'/>
      <color name='magenta' value='#f0f'/>
      <color name='yellow'  value='#ff0'/>
      <color name='black'   value='#000'/>
 </colors>

属性を使用すると、XMLは優れています。しかし、何らかの理由で、自家製XMLは一般に100%要素で構成されており、醜いものです。


2
それはJSONの例よりもさらに多くの非空白文字です。また、属性の解析はXMLでより煩わしくなります。
jmucchiello 2009年

4
おそらく、複合型は実際には要素でのみ記述できるため、ほとんどのツールではデフォルトになっています。このXMLは非常に使いやすく、読みやすいことに同意します。
マシューホワイト

18

JavaScriptによる簡単な消費が理由の1つである可能性があります。


6
それが私がそれを使う大きな理由です。手動でのxmlの解析は悪夢のように複雑です。また、私は最初にPythonを使用してJSONを作成しているので、データとオブジェクトを非常によく似た方法で処理します。
RandomInsano

10

JSONは、特にJavaScriptの組み込みサポートにより、そのサイズと使いやすさから、WebサービスからのWebアプリケーションでのデータの消費に最適です。JSONのインスタントルックアップと比較して、xmlフラグメントを解析するための計算オーバーヘッドを想像してください。

非常に良い例がJSON-Pです。my_callback({"color": "blue", "shape":"square"});動的に生成された<script>タグ内など、コールバック関数呼び出しにラップされたWebサービスからデータを取得できるため、データを関数で直接消費できますmy_callback()。XMLを使用してこの便利さを実現する方法はありません。

XMLは、XSLTを使用して複数の形式でデータのページをレンダリングするフレームワークがある大きなドキュメントに最適な形式です。XMLは、他の多くの用途の間で読みやすくするために、アプリケーション構成ファイルで使用することもできます。


8

ここでは、XMLの主な利点である検証ルール(DTD、XSD)について言及していません。両方を使用した私の結論:

  • JSONは、特にサーバー側とクライアント側の両方を自分で開発する場合、ajaxに最適です。基本的に、サーバースクリプトでjsオブジェクトを作成します。
  • 大きな官僚組織間でデータ交換標準を設定する必要がある場合、XMLは企業環境で優れています。多くの場合、あるパーティは別のパーティよりも数カ月早く開発するので、合意されたXSDに対して要求を検証することは本当にメリットがあります。また、大企業では、データ転送は異なるシステム間で変換されることがよくあります。これはXMLの強みでもあるとXSLTは考えています。例:JSON:pへのコードなしの変換

もちろん、開発中のjsonスキーマはありますが、組み込みのサポートはどこにもありません。

私は両方の愛好家ですが、強みは違うだけです。


6

ほとんどの言語でJSONエンコーダーとデコーダーが利用できるようになったので、理にかなった用途でJSONを使用しない理由はありません(おそらくXMLの使用例の90%です)。

スキーマの変更を容易にするために、大規模なSQLデータベースでJSON文字列が使用されていると聞いたこともあります。


5

正直なところ、JSONとXMLは、すべてのタイプのデータを表すことができるという点で、それほど大きな違いはありません。ただし、XMLは構文的にJSONよりも大きいため、JSONよりも重くなります。


1
あなたの答えは特に感激しませんでしたが、それは間違いではなかったので、反対票は不当に思えました。
deft_code 2009年

+1は、XMLがJSONの適切なスーパーセットになる方法で使用できることを示します。
セバスチャン

5

JSONには、JavaScriptプログラミングとのインピーダンスの不一致はありません。JSONには、整数、文字列、リスト、配列を含めることができます。XMLは要素とノードであり、使用する前に整数などに解析する必要があります。


アイテムを解析する必要性は、インピーダンスの不一致に相当しません。
Rob、

9
オブジェクトリレーショナルマッピングの場合のように、インピーダンスの不一致は、概念が1つの形式から別の形式に正しくマッピングされない場合です。オブジェクトでは非常に簡単に表現できるがSQLでは難しいものもあれば、SQLを使用して簡単に表現できるものもありますが、オブジェクト階層ではそれらを明確に表現することが困難です。XMLとJSONを使用すると、意味を理解するためにもう一方よりも少し多くの作業が必要になることがよくありますが、それは実際には解析ツールに依存します。表現力は(ほとんど)同じです。
jcdyer 2010

4

どちらも素晴らしく、非常に移植性があります。ただし、JSONはほとんどの場合に少ない文字にシリアル化されるため(配信時間の短縮につながります)、JavaScriptオブジェクトの構文と一致するため、メモリ内オブジェクトに直接変換できるため、Ajaxをはるかに簡単に使用できるようになり、人気が高まっています。実装。

XMLはまだ素晴らしいです。JSONは、XMLと比較して「最新かつ最高」です。


1
また、JavaScriptの新しいリビジョンには、「安全な」(評価のない)組み込みJSONエンコーダーとデコーダーが含まれ始めていると思います。
Nosredna 2009年

4

JavaScriptで簡単に解析でき、軽量です(JSONのドキュメントは、同じデータを含むXMLドキュメントよりも小さくなります)。


3

JSONは、JavaScriptオブジェクトに直接eval(aJsonString)できるという点で、効果的にシリアライズされたJavaScriptです。ブラウザの内部では、JSONはJavaScriptに完全に適しています。同時に、JavaScriptは非常に緩やかに型付けされた動的言語であり、Xml / Xsdドキュメント内に含まれる利用可能なすべての特定の型情報をネイティブで利用することはできません。この追加のメタデータ(相互運用性に優れています)はJavaScriptの妨げになり、作業が面倒で面倒になります。

サイズとパフォーマンス

ブラウザを使用している場合、JSONの方がシンプルでコンパクトであり、ネイティブでサポートされているため、シリアライズ/デシリアライズが高速です。利用可能なさまざまなシリアライザ間のサイズと速度を比較する、いくつかの利用可能なNorthwindデータベースベンチマークがあります。基本クラスライブラリでは、MicrosoftのXML DataContractシリアライザは、JSON シリアライザよりも30%以上高速です。これは、XML シリアライザーよりも2.6倍以上速いJsonSerializerを開発できたため、MicrosoftがXML シリアライザーに費やし努力に関係しています。ベンチマークに基づくペイロードについては、XMLはおおよそ2倍を超えているように見えますJSONのサイズ。ただし、XMLペイロードが同じドキュメント内で多くの異なる名前空間を使用している場合、これはすぐに失敗します。


2

XMLは、ほとんどの状況で膨張したヘビ油です。JSONは、肥大化することなく、ほとんどの利点を提供します。


1

ここで言及したもの以外の1つの大きな利点。同じデータの場合、XMLファイルとして表現する方法は複数ありますが、JSONを使用する方法は1つだけなので、あいまいさを排除できます:)


2
{"colors":["red","green","blue"],"systems":["windows","mac"]}{"entries":[{"type":"color","value":"red"},{"type":"system","value":"mac"}]}
ジェロームバウム

0

私はこれまでのところ専門家ではありませんが、これまでにさまざまな企業で働いてきましたが、通常、小規模なデータ環境または構成値でXMLを使用します(web.configが良い例です)。

大量のデータがある場合、通常はそのデータについてレポートする必要があります。また、XMLはレポートの優れたソースではありません。物事の壮大な計画では、トランザクションデータベースはXMLよりもレポート/検索が簡単であるように見えます。

これは理にかなっていますか?上で述べたように、私は専門家ではありませんが、私の経験から、これは事実であるようです。また、開発者の波がUI(Ajax)のクライアント側またはスクリプト化されたアクションに移行し、MicrosoftのAjaxがjQueryやMooTools( YahooのYUIもそうです。JSONを使用したシリアル化可能なオブジェクトの美しい統合によります。

私は自分のVBコードにJSONシリアライザーを実装しているコードを書いています。それはあまりにも簡単で、アップグレード/変更の観点から見ると、それを打ち負かすことはできません。それは私が推測するVSに常習し続けるマイクロソフトの方法です。最近、エンタープライズアプリケーションを(jQueryを介して)Ajaxを使用し、JSON形式を使用するように変換しました。完了するまでに約2週間かかりました。統合しないと、かなりの追加コードを書かなければならなかったので、私は実際にMicrosoftに統合してくれたことに感謝しています。


この質問には混乱があったと思いますが、この回答には多くの憶測が含まれています。
marr75 2009年

@Eric P:VBに問題はありません。
Taptronic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.