XMLよりもJSONを好む場合は?


148

私の要件は、データベースから取得した一連の値をスプレッドに表示することだけです。私はjqueryを使用しています。

回答:


149

次のいずれかに該当する場合は、JSONよりもXMLを優先してください。

  • メッセージの検証が必要です
  • XSLTを使用しています
  • メッセージにマークアップされたテキストがたくさん含まれている
  • JSONをサポートしていない環境と相互運用する必要がある

次のすべてが当てはまる場合は、JSONをXMLより優先します。

  • メッセージを検証する必要がない、またはその逆シリアル化の検証が簡単
  • メッセージを変換しない、またはメッセージの逆シリアル化を変換するのは簡単です
  • メッセージはほとんどがデータであり、マークアップされたテキストではありません
  • メッセージングエンドポイントには、優れたJSONツールがあります

9
JSONは、マークアップされたテキストの処理において、XMLに勝る利点はありません。しかし、私はあなたの要点を理解しています。それは多分過大評価されています。
ロバートロスニー、

10
すべての条件が等しい場合、2つの理由でJSONを優先します。JSONは、XMLよりも解析がはるかに軽く(CPUフレンドリー)、転送する必要のあるデータがはるかに少なくて済みます(ネットワークフレンドリー)。
Roger Barreto

いつXSLTを使用し、XMLを使用しないのですか?XSLTを既に使用している場合は、XMLが提供されます。これは、XMLを使用するという主張をサポートするものではありません。JSON.parse()を使用している場合は、JSONを使用すると言うようなものです。また、XSLT変換を作成するよりもJSONオブジェクトを変換する方が簡単だと主張しますが、それは私の個人的な偏見かもしれません。
スペンサー

JSONの検証部分に完全に同意しません。JSONも検証可能です。このIETFドラフトを確認してください:リンク ドラフトですが、まだです
。–

@sotn XML(XQueryなど)のようにJSON用のPL / SQLを使用していません。一部のNoSQL DB(eXist、MarkLogicサーバー、EMC Documentum xDB、BaseX、Zorba)の
ベース

81

XMLを使用する必要がない限り、JSONを使用します。理解するのは簡単であり、(構成のオーバーヘッドが少なくて済むため)、ライブラリがコンテキスト内で利用可能であれば、読み書きのプログラミングが簡単になり、現在は広く普及しています。

Amazonが最初にカタログをWebサービスとして公開したとき、JSONとXMLの両方を提供していました。90%の実装者のようなものがJSONを選択しました。


56
「XMLを使用する必要がない限り、JSONを使用します。」まさにその通りです。
EndangeredMassa

2
したがって、より深い質問は、「XMLを使用する必要がある理由は何ですか?」です。これらの理由はばかげている; または、あなたの意見とは異なる観点から、単に異なる懸念を反映しているのでしょうか?
13 ren

5
既存のソフトウェアを含め、書き換えたくないいくつかの理由。しかし、最も重要なのは、両端を制御しないデータ交換形式としてXMLを使用すること、またはXMLを適用および要求する正式な標準があることです。私が関与する唯一の開発者である場合にのみ、私は任意に選択できます。
dkretz 2009

15

クライアント側ですでにJavaScriptを実行している特定のケースを考慮して、以下の理由でJSONを使用します。

  • JSONはJavaScriptにネイティブであるため、クライアント側で作成するコードを少なくする必要があります。JSON文字列だけeval()(または、さらに良いJSON.parse()ことに)を使用して、使用できるオブジェクトを取得する必要があります。

  • 同時に、クライアント側でのJSONの評価はより効率的で、したがってより高速になります。

  • JSONシリアライゼーションは、XMLよりも短い文字列を生成します。JSONを使用すると、ネットワーク全体で実行されるデータの量が減り、その点でパフォーマンスが向上します。

ここにいくつかのさらなる読書があります:http : //www.subbu.org/blog/2006/08/json-vs-xml


7
されていないeval()大きなノーノーJSONをINGの?
2008年

@ Shy、JSONの独自のサイトでは、JSONでevalを使用できます(括弧はラップされています):json.org/js.html
strager

9
json.orgから取得:eval関数は非常に高速です。ただし、JavaScriptプログラムをコンパイルして実行できるため、セキュリティ上の問題が発生する可能性があります。evalの使用は、ソースが信頼され、適切である場合に示されます。JSONパーサーを使用する方がはるかに安全です
sarego

2
eval()よりもJSON.parse()を優先します。
Havvy 2013年

14

XML対JSON relmで遭遇した他のいくつかのこと:

JSONはとても良いです

  • 名前/値のペア
  • それらのペアを入れ子にする

つまり、配列またはネストされた配列が好きになる傾向があります。ただし、JSONには両方がありません

  • 属性
  • 名前空間

したがって、2つ以上のJSONサービスを組み合わせると、名前空間の競合が発生する可能性があります。そうは言っても、私の経験でデータを交換するときにXMLを使用できるのと同じものの約90%でJSONを使用できます。


Jsonのもう1つの問題は、2つのjsonメッセージを簡単にマージして新しいjsonメッセージを作成できないことです。これは通常WELLFORMEDされることはありません...
VTD-XML-著者

7
何のために属性が必要ですか?要素に他の値が含まれている場合は、それをオブジェクトにします-メンバーは「属性」です。率直に言って、XMLの二分的な属性/コンテナー構造は完全に有害です。
foo

属性を持たないJSONは機能であると私は主張します。
ブライアン、

11

通常、JSONはよりコンパクトで、解析が高速です。

次の場合はXMLを優先します。

  • クライアントでデータを処理する必要があり、そのためにXSLを活用できます。特に大きなデータチャンクの場合、XML + XSLチェーンがJSON + JavaScriptよりも高速に動作する可能性があります。
    • 1つの良いケースは、データをHTMLスニペットに変換することです。
  • 従来のさまざまなケース:
    • 既存のXMLサービスがあり、何らかの理由でJSONで書き直すのは面倒です。
    • ユーザーの入力を使用して簡単な処理を行った後、このデータをXMLとしてポストバックする必要があります。

(ほぼ)XMLの重要なケースの1つ:生データを送信するよりも、HTMLスニペットを送信するほうが有益であることを検出しようとします。ああああは単純なアプリケーションで驚異的ですが、見過ごされがちです。通常、このスタイルは、サーバーが処理せずにWebページにインライン化されるHTMLスニペットを送信することを前提としています。

通常、AHAHの場合、CSSを最大限に活用してスニペットを視覚的にマッサージし、ユーザー固有またはアプリケーション固有の設定を使用してスニペットの関連部分を非表示/表示するなどの単純な条件を実装します。


8

JSONは解析が簡単で高速です。XMLは解析が少し難しく、解析と転送に時間がかかります(ほとんどの場合)。

jQueryを使用しているため、JSONを使用することをお勧めします。jQueryはJSONデータを取得し、それを自動的にJavaScriptオブジェクトに変換できます。実際、evalを使用してJSONデータをJavaScriptオブジェクトに変換できます。XMLは手動で横断する必要があります(Javascriptでこれがどのように機能するかはわかりませんが、XMLライブラリーを使用したほとんどの言語では難しい/煩わしいです)。


1
JSONは本質的にJavaScriptオブジェクトであり、jQueryは特別な「変換」を実際に行っていません。考えただけで明確になるはずです。
Brian Gianforcaro 2008年

5
JSONは、JavaScriptでインスタンス化されない限り、JavaScriptオブジェクトではありません。それはたまたまjavascriptオブジェクトのシリアル化に使用される形式に従いますが、少なくともXMLと同じくらい簡単に、ほとんどの言語から(適切なアドオンと組み込みで)アクセスできます。
dkretz 2008年

@Gianforcaro、私はこれを実現します。私はそれをより明確に述べるために私の投稿を編集します。@doofledorfer、私は「そしてそれをJavascriptオブジェクトに変換します」と言いました。JSONデータがJavaScriptオブジェクトであるとは言いませんでした。
ストレージャー、2008年

聞き取れませんでした。
ストレージャー、2008年

8

クライアントブラウザーがデータを解析するために実行する必要がある処理の観点からは、JSONが常に推奨されます。また、JSONは軽量のデータ交換フォーマットです。

XML解析は常に多くのブラウザーリソースを消費するため、特に必要がない限り、できる限り回避する必要があります。


7

Webプロトコルの履歴(SOAP、XML、JSON、REST、POXなど)の詳細と、それぞれの利点と欠点をまとめたブログ投稿があります。 ます。http //www.servicestack.net / mythz_blog /?p = 154

実際、動的(JSON)言語と静的(XML)言語の違いを比較することで、XMLとJSONの多くの類似点を引き出すことができると思います。

基本的に、XMLはより厳格でより厳密なシリアル化形式であり、オプションで付随するスキーマ(XSDまたはDTDのいずれか)で検証できます。XSDは非常に複雑で、日付、時刻、列挙、ユーザー定義型、さらには型の継承など、さまざまな型を記述できます。SOAPは、XML機能セットの上に効果的に構築され、Webサービスを記述する標準化された方法を提供します(例:タイプと操作)WSDLを介して。WSDL仕様の冗長性と複雑さは、開発に手間がかかる可能性があることを意味しますが、同時に、使用可能なツールが大幅に増え、最新のほとんどの言語は、いくつかの負担を負うクライアントプロキシを生成する自動化ツールを提供します外部サービスと相互運用する場合はオフにします。

頻繁に変更されることがない明確に定義された「エンタープライズサービス」がある場合、またはWebサービスに多くの異なる言語からアクセスする必要がある場合は、WebサービスにXMLを使用することをお勧めします。

そのすべての利点について、XMLには欠点もあります。型指定された拡張可能な形式を提供するために名前空間に依存し、同じドキュメント内の属性と要素を指定できるようにします。1つのドキュメント内に異なる名前空間があることは、Xmlパーサーを使用してデータを抽出するときに多くの時間を意味します。また、取得/トラバースする各要素の名前空間を提供する必要があります。また、ペイロードを外挿して、必要以上に冗長にします。要素だけでなく属性も出力するオプションがあると、クラスがXMLドキュメントに適切にマップされません。これらの機能だけでは、ほとんどの言語でプログラムに適合しないため、作業が面倒で面倒になります。

一方、JSONは非常に緩やかに型付けされており、基本型(数値、ブール、文字列、オブジェクト、配列)のみをサポートしているため、多くの点でXMLとは完全に逆です。他のすべては本質的に文字列に収まる必要があります。これは、言語の境界を越えて通信しようとする場合には適切ではありません。より具体的なタイプをサポートする場合は、帯域外の非標準仕様に準拠する必要があるためです。利点として、その限られた機能セットは、ほとんどの言語にプログラムで適切に適合し、JSON文字列を直接JavaScriptオブジェクトに評価できるため、JavaScriptに完全に適しています。

サイズとパフォーマンス

私はいくつか持っている利用できるのNorthwindデータベースのベンチマーク MicrosoftのXMLとJSON実装間のサイズと速度を比較します。基本的に、XMLはJSONのサイズの2倍を超えますが、JSONのものより30%以上高速であるため、MicrosoftがXML DataContractSerializerを最適化するために多くの努力を払ったように見えます。サイズとパフォーマンスの間でトレードオフを行う必要があるようです。この事実に満足していないので、私は自分の高速JsonSerializerを作成することにしました。これは、MSのXMLの2.6倍になり、両方の世界で最高です:)。


6

着信データのチャンクを検証する必要がある場合は、XMLをJSON経由で選択します。これは、XMLがXSDを介してネイティブにサポートしているためです。


3

JSONから-最後の足

JSONルートをたどると、XMLが10年前に直面したのと同じ問題に遭遇します。

2つの異なるソースからのデータを1つのJSONパケットに混在させると、要素ラベルが互いにぶつかることがあります。梱包伝票と請求書を混同すると、突然、差出人アドレスがまったく異なるものを意味する場合があります。そのため、XMLには名前空間があります

異なるJSON構造間で変換するには、平凡なコードを記述する必要があります。より宣言的な方法でデータをマップすると、作業が簡単になります。XMLにXSLTがあるのはそのためです。

JSONパケットの構造(フィールド、データ型など)を記述することは、人々がサービスにフックするために必要です。これにはメタデータ言語が不可欠です。そのため、XMLにはスキーマがあります。

2つのクライアント/サーバーの同時会話を引き継ぐことは注意が必要です。サーバーに2つの質問をして、1つの回答が返ってきた場合、サーバーがどのような質問に答えるかをどのようにして知ることができますか?XMLにWS-Correlationがあるのはそのためです。


2
名前空間は、もう1つの回避策です。必要に応じて、JSONでも同じように実行できます。WS-CorrelationもXMLへの後付けとして追加されたもので、「組み込み」ではありません。JSONに追加することもできます。構造記述(スキーマ)はXMLに特別なものではありません。eBNFの発明以来、あらゆる正式な言語に対してさまざまな方法でそれを行うことができます。ただし、XSLTは有効なセールスポイントです。
foo

2

JSONはJavaScriptのネイティブエンコーディングです。作業がはるかに速く簡単になります。


2

http://json.org/xml.htmlの最初の行から

Extensible Markup Language(XML)は、Standard Generalized Markup Language(SGML)から派生したテキスト形式です。SGMLと比較すると、XMLは単純です。比較すると、ハイパーテキストマークアップ言語(HTML)はさらに単純です。それでも、HTMLに関する優れた参考書は1インチの厚さです。これは、ドキュメントのフォーマットと構造化が複雑なビジネスであるためです。。。。

明らかにJSONの方が高速ですが、読みにくいのはさらに明白です。速度にはJSONを使用し、人間の相互作用があり速度を犠牲にすることができる場合はXMLを使用してください。


2
あなたの答えは新しい情報を持っていません...しかし、それはまだ本当だと思います

1

私は、あらゆる種類の構成、データ交換、またはメッセージングにJSONを使用しています。他の理由で、またはドキュメントのようなデータを意味的にマークアップする必要がある場合にのみ、XMLを使用します。


1

XMLとJSONの両方がMicrosoftによってサポートされています。XMLリテラルは、VB 9の新しいクールな機能でした。ASP.NET4.0の次のバージョンでは、JSONはクライアント側のテンプレート機能を活用するために必須です。

あなたが尋ねた質問から、jQueryの有無にかかわらずクライアント側で処理するのは簡単なので、JSONがあなたにとっての選択であるように思えます。


1

JSONの使用

  • ブラウザのJavaScriptでデータを使用する場合。
  • データモデルは単純で複雑ではありません(複合オブジェクトが多すぎます)。

XMLの使用

  • 主にSOAのような環境で、異種プラットフォームとテクノロジーにいくつかのサービスを統合します。
  • SOAPには、HTTP以外のさまざまなプロトコルで送信できるという利点があります。
  • XSLT、XSL-FOなどのデータモデル変換ツールで使いやすい
  • XMLデータを格納/クエリ(XQuery)するための多くのデータベースサポート。
  • XMLは非常に成熟したデータ形式であるため、考えられるあらゆるユースケースをサポートするツールがたくさんあります。

1

私が見つかりました。デジタルバザーでこの記事は本当に面白いです。

記事の一部を以下に引用します。

JSONプロについて:

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

XMLプロについて:

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

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


この回答と提供された抜粋は、JSONを強く支持する引用記事のテノールを完全に誤って伝えています。引用は記事の著者が同意しない第三者のものです。引用された記事は非常に優れた読み物です。したがって、虚偽の表示にもかかわらず、この回答に対する反対票はありません。
Lawrence Dol 2014

1

クイックルール:

  • JSON:プログラム間データ形式
  • YAML(JSONスーパーセット):人とプログラム間のデータ形式
  • XML:文書マークアップ形式

説明:

JSONの唯一の役割は、ほとんどのプログラミング言語に共通のデータ型(リストハッシュスカラー)を使用してオブジェクト指向のデータをシリアル化することです。そのため、これを打ち負かしたり改善したりすることはできません。つまり、「JSONにはバージョン番号がないため、JSON文法の改訂は想定されていません」。- ダグラス・クロックフォード(あなたが完全にあなたの仕事をしているという印としてそれを打ち負かすことはできません)

XMLはかつてデータ交換形式として販売されていましたが、最も一般的な2つのユースケースを検討してください:非同期クライアント/サーバー通信(AJAX) -JSONはXMLを完全にほとんど置き換えました(Xは実際にはJである必要があります):JSONはXMLを冗長な代替手段にしています。

XMLが広く使用されているもう1つのことは、プログラム用の人間が書き込み/読み取り可能な(?)データファイルでしたが、ここでも、YAMLでより簡潔で、プログラムに優しく、より人間に優しい形式であるJSONスーパーセットがあります。

したがって、データ表現については、JSONはXMLを全面的に上回っています。XMLには何が残っていますか?混合コンテンツのドキュメント表現。それが意図されていたものです


0

最近のほとんどのWebテクノロジーはJSONを使用して動作するため、JSONを使用するのは間違いなく正当な理由です。大きな利点は、XMLでは同じ情報を複数の異なる方法で表現できることです。これはJSONではより簡単です。

また、JSON IMHOはXMLよりもはるかに明確であるため、私にとっては明らかに有利です。また、.NETを使用している場合、Json.NETは、JSONを使用するのに役立つ勝者です。

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