JSONとXMLの比較[終了]


273

どちらが速いか知りたい:XMLとJSON?いつ使用するのですか?


60
もっと速く?伝染;感染?処理?生成していますか?どちらもあなたが知っている足がありません。JSONは、マークアップのオーバーヘッドが少ないため、何らかの点で「高速」である可能性があります。一方、XMLはXMLSchemaを提供して、型、構造、...の妥当性を保証します。XMLを他のほぼすべての出力形式に変換するXSLTがあります... 必要なものによって異なります。
Felix Kling、2011

2
以前に尋ねた他の質問も確認してください:stackoverflow.com/search
Felix Kling

16
大きく!これは私が本当に知りたかったことであり、それがここにあったことを本当に嬉しく思い、答えはPERFECTでした。BAD ON YOU、seモデレーター:エンゲージメントのルールを拡張する時がきたのかもしれません。少なくとも、それが答えられるのを許してくれてありがとう!
Mark Gerolimatos

この投稿がゲームに極端に遅れてもかまいませんが、同意します。質問が重複している場合、無関係である場合、または利用規約と矛盾している場合は、おそらく(閉じられたスレッドまたは役に立たないスレッド)が検索で最初に出てくるはずではありません。(ところで、これは出てくる2番目の[重複した]結果です)おそらく回答は無駄のない簡潔なものでなければならないことに同意しますが、結果の後に閉じた未回答のスレッドがトピックのコメントで満たされている場合(これは使用条件に反します)それは誰にも役立ちません。
Izaac Corbett

2
尋ねられた質問は不明確ですが、これは意見に基づく質問ではありません。
qwr 2018年

回答:


221

どちらを使用するかについて答える前に、少し背景:

編集:この比較は、JavaScriptを使用するブラウザーで実際に使用するという観点からのものであることを言及しておきます。それはどちらのデータ形式も使用する必要ある方法ではなく、詳細を変更して私が言っていることを完全に無効にする多くの優れたパーサーがあります。

JSONはよりコンパクトであり、(私の見解では)より読みやすくなっています。伝送では、転送されるデータが少ないため、「高速」になります。

構文解析では、パーサーによって異なります。コード(JSONまたはXML)をデータ構造(マップなど)に変換するパーサーは、XMLの厳密な性質から恩恵を受ける可能性があります(XMLスキーマはデータ構造を明確に区別します)-ただし、JSONではアイテムのタイプ(String / Number / Nested JSON Object)は構文的に推測できます。例:

myJSON = {"age" : 12,
          "name" : "Danielle"}

パーサーは、それが12数値を表すことを認識するために十分にインテリジェントである必要はありません(Danielle他の文字列と同じです)。したがって、JavaScriptでは次のことができます。

anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False

XMLでは、次のようにする必要があります。

<person>
    <age>12</age>
    <name>Danielle</name>
</person>

(余談ですが、これはXMLがかなり冗長であるという点を示しています。データ転送の問題です)。このデータを使用するには、パーサーを介して実行し、次のようなものを呼び出す必要があります。

myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True

実際、優れたパーサーはを入力するのが適切ageです(一方、そうしたくない場合もあります)。このデータにアクセスすると、上記のJSONの例のように属性ルックアップを実行するのではなく、キーでマップルックアップを実行しますname。次のようにXMLを作成する方が直感的です。

<person name="Danielle" age="12" />

ただし、データにアクセスするには、マップルックアップを実行する必要があります。

myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");

編集:オリジナル:

ほとんどのプログラミング言語(すべてではなく、あらゆるストレッチによって)では、このようなマップルックアップは、属性のルックアップ(JSONを解析したときに取得したような)よりもコストがかかります。

これは誤解を招く可能性があります。JavaScript(およびその他の動的言語)では、マップルックアップとフィールドルックアップの間に違いないことに注意してください。実際、フィールドルックアップ単なるマップルックアップです。

本当に価値のある比較が必要な場合は、それをベンチマークするのが最善です。データを使用する予定のコンテキストでベンチマークを実行してください。

私が入力している間、Felix Klingはそれぞれをいつ使用するかという点でそれらを比較するかなり簡潔な回答をすでに提示しているので、これ以上は説明しません。


単刀直入なメモ... JavaScriptフィールドのルックアップは、必ずしもマップのルックアップであるとは限りません。問題のオブジェクトとフィールドによって異なります。小さなオブジェクト(特に、作成後にプロパティがアタッチされていないオブジェクト)は、最新のJSエンジンのインラインキャッシュで最適化された「高速型」を使用することが多く、多数のプロパティまたはオブジェクト構造が頻繁に変更されるケース。
ブランドンパドック

2
JSONは人間が解析する方が簡単ですが、XMLはコンピューターが解析する方が簡単です。
Jus12

5
たとえば、PHPでは、JSONは78kでは依存関係なしでjson.soを使用しますが、XMLでは54k / 32kでxml.soまたはxmlreader.soが必要ですが、1.4megsであるlibxml2.soも必要です。コードが多いほど、処理とメモリの使用に時間がかかります。言うまでもなく、XMLはそのノード/ツリー構造のため、循環参照があります。これは、弱い参照を持たない言語では問題になる可能性があります。いくつかの言語で、XMLパーサーが対応するJSONパーサーよりもFARが大きい(より多くのメモリを消費し、より多くのメモリを使用する)ことを発見しました。
Rahly

JSの厳密なステータスの問題とこの無関係の比較を組み合わせるのはなぜですか?二重または三重の等号を参照します。
atilkan

1
@atilkanは、多くのパーサーが数値文字列を数値として解釈するか、数値を数値文字列として格納するためです。
mazunki

244

FasterはJSONやXMLの属性ではなく、それらを比較することで得られる結果でもありません。もしあれば、それはパーサーの属性またはデータを送信する際の帯域幅です。

JSONとXMLの長所と短所のリスト(冒頭)は次のとおりです。


JSON

プロ:

  • 単純な構文。XMLと比較して「マークアップ」のオーバーヘッドが少なくなります。
  • マークアップはJSオブジェクトリテラル表記のサブセットであり、JavaScriptと同じ基本的なデータ型を持っているため、JavaScriptで簡単に使用できます。
  • 説明とデータ型および構造の検証のためのJSONスキーマ
  • 深くネストされた構造の情報を抽出するためのJsonPath

短所:

  • 単純な構文。少数の異なるデータ型のみがサポートされています。

  • コメントはサポートされていません。


XML

プロ:

  • 一般化されたマークアップ; あらゆる目的のための「方言」を作成することが可能です
  • データ型のXMLスキーマ、構造の検証。新しいデータ型を作成することも可能にします
  • さまざまな出力形式に変換するためのXSLT
  • 深くネストされた構造の情報を抽出するためのXPath / XQuery
  • 名前空間の組み込みサポート

短所:

  • JSONと比較すると比較的冗長です(同じ量の情報でより多くのデータが得られます)。

したがって、最終的には何が必要かを決定する必要があります。明らかに、両方のフォーマットには正当なユースケースがあります。ほとんどJavaScriptを使用する場合は、JSONを使用する必要があります。

長所と短所を自由に追加してください。私はXMLのエキスパートではありません;)


20
JSONおよびPro for XMLのもう1つの欠点:JSONはオブジェクト参照をサポートしていません(循環または非サポート)、XMLはサポートしています。XMLは、id属性をドキュメント内で一意にすることでこれを行います。
Earth Engine

7
@EarthEngine実際にはJson.Net(json.codeplex.com)はオブジェクト参照をサポートしています:james.newtonking.com/projects/json/help/index.html?topic=html /
Dmitrii Lobanov

22
@DmitryLobanov:JSON標準にいくつかの制限を追加するだけですが、他のJSONツールでは認識されません。したがって、JSONでは「ネイティブ」ではありません。ただし、XMLの場合、制限は標準で記述されているため、ネイティブです。
Earth Engine

1
JSONスキーマはどうですか?en.wikipedia.org/wiki/JSON#JSON_Schema
John Doe

5
JSONには組み込みの配列と「null」値があります。一方、XMLでは、スキーマパーサー全体に何らかの規則が必要です。JSONにはXSLTのような変換プロジェクトもあります(例:github.com/emlynoregan/bOTLjs
Vasyl Boroviak

22

処理速度だけが関連する問題ではないかもしれませんが、それが問題なので、ベンチマークのいくつかの数値を次に示します。速度については、この単純なベンチマークでは、XMLはJSONに比べて21%のオーバーヘッドを示しています。

記事で述べているように、冗長性に関する重要な注意点は、最も一般的な不満です。これは、たとえ問題であっても、実際にはそれほど関係ありません(XMLデータもJSONデータも通常人間ではなくマシンによって処理されます)。速度、それは圧縮するためにいくつかの合理的なより多くの時間を必要とします。

また、このベンチマークでは、大量のデータが処理され、通常のWebアプリケーションはそのようなサイズ(90 MBなど)のデータチャンクを送信しません。また、圧縮が効果的でない場合があります(十分に小さいデータチャンク、圧縮されたチャンクの場合)。は圧縮されていないチャンクよりも大きいため)該当しません。

それでも、圧縮が含まれていない場合、特に古典的なHTTPオーバーヘッドがないためにJSONの利点がさらに大きくなるWebSocket接続を介して送信される場合、JSONは明らかにより簡潔であるが、伝送チャネルでの重みが少なくなります。重要です。

送信後、データが消費され、これは全体の処理時間に含まれます。十分な大きさまたは複雑なデータが送信される場合、検証するXMLパーサーによって自動的にチェックされるスキーマがないため、JSONデータをさらにチェックする必要がある場合があります。これらのチェックはJavaScriptで実行する必要がありますが、特に高速であるとはわかっていません。そのため、このような場合、XMLよりもオーバーヘッドが増える可能性があります。

とにかく、テストだけが特定のユースケースの答えを提供します(速度が本当に唯一の問題であり、標準でも安全でも完全性でもない場合...)。

更新1:言及する価値があるのは、Gzipを使用するよりも低コストで圧縮を提供するEXI、つまり、圧縮されたXMLを解凍するために必要な処理を保存するEXIです。EXIはXMLに対するものであり、BSONはJSONに対するものです。空間と時間の両方での効率に関するいくつかの参照とともに、ここに簡単な概要があります:EXI:最後のバイナリ標準?

更新2:W3Cが実施したバイナリXMLパフォーマンスレポートも存在します。これは、効率性と低メモリおよびCPUフットプリントもXML領域の問題であるため、効率的なXML交換評価です。

2015年3月1日更新

このコンテキストで注目すべき価値は、HTTPオーバーヘッドが問題として発生したためです。IANAは、EXIエンコーディング(上記の効率的なバイナリXML)をHTTPプロトコルのコンテンツコーディングとして(compressdeflate、およびgzipとともに)登録しています。 。これは、EXIが、他のHTTPクライアントの間でブラウザーによって理解されることが期待できるオプションであることを意味します。Hypertext Transfer Protocol Parameters(iana.org)を参照してください。


「速度のために、この単純なベンチマークでは、XMLはJSONに比べて21%のオーバーヘッドを提示します」-使用される特定のパーサーによって、JSONの解析には大きな違いがあります。特定のパーサーを引用してもほとんど意味がありません。XMLについても同様です。
Jeffrey Blattman、2018年

17

私が見つかりました。デジタルバザーでこの記事は本当に面白いです。Normからの彼らの引用を引用すると:

JSONプロについて:

渡したいものがすべてアトミック値、リスト、またはアトミック値のハッシュである場合、JSONにはXMLの多くの利点があります。インターネット上で直接使用でき、さまざまなアプリケーションをサポートし、JSONを処理するプログラムを簡単に記述できます。オプションの機能はほとんどなく、人間が判読可能でかなり明確であり、そのデザインは正式で簡潔であり、JSONドキュメントは簡単に作成でき、Unicodeを使用しています。...

XMLプロについて:

XMLは、構造化されていないデータの豊富さを非常にうまく処理します。Web APIデザイナーの幹部がXMLの死を喜んで祝ったとしても、XMLの将来についてはまったく心配していません。

そして、「私はあなたにそう言った!」私の机にトークンを置きます。より豊かなAPIを開発するように求められたときにJSON関係者が何をするのかを楽しみにしています。あまり構造化されていないデータを交換したい場合、JSONに変換しますか?JSONのスキーマ言語についての言及がときどき見られますが、他の言語もフォローしますか?...

私はノルムに個人的に同意します。XMLに対するほとんどの攻撃は、一般的なアプリケーションのWeb開発者からのものであり、統合開発者からのものではないと思います。しかし、それは私の意見です!;)


よく置きます!アクティブな開発者の80%がJavaScriptキディである場合、80%はJSONが「より良い」という意見を表明します。しかし、型付き言語を使用する人は、JSONについて少し面白がっています。{ "foo": 42 }そのオブジェクトはどのタイプですか?次に、タイプの欠如を修正するために、次のようなものが表示されます{ "__type": "Bar", "foo": 42 }。対照的に、XMLでは、タイプは要素名に関連付けることができます:<Bar><foo>42</foo></Bar>。jsonのようなlispとjavascriptの人のみ;)
BitTickler

15

XML(拡張マークアップ言語)はXHRでよく使用されます。これは、これが標準のブロードキャスト言語であり、あらゆるプログラミング言語で使用でき、サーバー側とクライアント側の両方でサポートされるため、これが最も柔軟なソリューションです。XMLをより多くの部分に分割できるため、指定されたグループは、他の部分に影響を与えることなくプログラムの一部を開発できます。XML形式は、XML DTDまたはXMLスキーマ(XSL)でも決定でき、テストできます。

JSONはデータ交換形式であり、JavaScriptアプリケーションの可能な形式として人気が高まっています。基本的に、これはオブジェクト表記配列です。JSONの構文は非常に単純なので、簡単に学習できます。また、JavaScriptは、eval関数を使用したJSONの解析をサポートしています。一方、このeval関数にはネガティブがあります。たとえば、プログラムはJSONの解析が非常に遅くなる可能性があり、セキュリティのためにeval非常に危険な場合があります。これは、JSONが良くないことを意味するのではなく、もっと注意する必要があります。

私の提案では、ゲームのような軽いデータ交換を伴うアプリケーションにはJSONを使用するべきです。データ処理について本当に気にする必要がないため、これは非常にシンプルで高速です。

XMLは、ショッピングサイトなど、より大きなWebサイトに最適です。XMLはより安全で明確にすることができます。基本的なデータ構造とスキーマを作成して、修正を簡単にテストし、簡単にパーツに分割できます。

速度とセキュリティのためにXMLを使用することをお勧めしますが、軽量のものにはJSONを使用してください。


私は反対票を投じていませんが、JSONが一般に重いペイロードまたは遅いペイロードであるとどのように考えているのか興味があります。GZip / Deflateを適用できます。構文は本質的にバイトの点で小さくなります。JSONは、スキーマをコントラクトとして定義し、そのように簡単にシリアル化することもできます。
Anthony Mason

JSONを解析するためにevalする必要はありません。
Yay295 2017年

7

JSONの重要なことは、セキュリティ上の理由からデータ転送を暗号化しておくことです。JSONがXMLよりもはるかに高速であることは間違いありません。XMLは100ミリ秒かかりましたが、JSONは60ミリ秒しかかかりませんでした。JSONデータは操作が簡単です。


5
JSONはデータ転送の戦いに勝ちますが、要素のマークアップ、検証、拡張には欠けています。これが、Googleがsitemap.jsonではなくsitemap.xmlをクロールする理由です
Chetabahana 2015年

1
サイトマップはjsonが普及する前に定義されたので、これは最良の例ではありません。サイトマップは、XMLがJSONよりも一般的なサーバー間としても見なされます。(JSONは、JavaScriptで簡単に操作できるため、人気があるという理由だけで実際に使用されています。)
Matthew Whited '10

しかし、Google AMPは、xmlではなくjsonを使用します
Ashraf '24
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.