XMLは移植性が高く、ミニデータベースとして使用できると思いました。XMLがどこでも使用されるのを見てきました。大企業がJSONに切り替えることすら見ています。MicrosoftもJSONのサポートを統合しています。JSONに対する誇大宣伝は何ですか?
XMLは移植性が高く、ミニデータベースとして使用できると思いました。XMLがどこでも使用されるのを見てきました。大企業がJSONに切り替えることすら見ています。MicrosoftもJSONのサポートを統合しています。JSONに対する誇大宣伝は何ですか?
回答:
基本的に、JSONはJavaScriptによってネイティブに認識されるため、2つの基本的な構造のみに依存しているため、軽量、ミニマリズム、移植性に優れています。
XMLは、さまざまな名前空間のスキーマを一緒に混ぜ始めるまで実際には輝き始めません。次に、JSONが落ち始めますが、データのシリアル化フォーマットが必要なだけの場合、JSONはXMLよりも小さく、軽量で、人間が読みやすく、一般的に高速です。
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などの同じまたは類似のデータ型に直接マッピングされるため、これは動的言語のバックグラウンドから来た人々にさらに当てはまる可能性があります。
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>
<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%要素で構成されており、醜いものです。
JavaScriptによる簡単な消費が理由の1つである可能性があります。
JSONは、特にJavaScriptの組み込みサポートにより、そのサイズと使いやすさから、WebサービスからのWebアプリケーションでのデータの消費に最適です。JSONのインスタントルックアップと比較して、xmlフラグメントを解析するための計算オーバーヘッドを想像してください。
非常に良い例がJSON-Pです。my_callback({"color": "blue", "shape":"square"});
動的に生成された<script>
タグ内など、コールバック関数呼び出しにラップされたWebサービスからデータを取得できるため、データを関数で直接消費できますmy_callback()
。XMLを使用してこの便利さを実現する方法はありません。
XMLは、XSLTを使用して複数の形式でデータのページをレンダリングするフレームワークがある大きなドキュメントに最適な形式です。XMLは、他の多くの用途の間で読みやすくするために、アプリケーション構成ファイルで使用することもできます。
ここでは、XMLの主な利点である検証ルール(DTD、XSD)について言及していません。両方を使用した私の結論:
もちろん、開発中のjsonスキーマはありますが、組み込みのサポートはどこにもありません。
私は両方の愛好家ですが、強みは違うだけです。
正直なところ、JSONとXMLは、すべてのタイプのデータを表すことができるという点で、それほど大きな違いはありません。ただし、XMLは構文的にJSONよりも大きいため、JSONよりも重くなります。
JSONには、JavaScriptプログラミングとのインピーダンスの不一致はありません。JSONには、整数、文字列、リスト、配列を含めることができます。XMLは要素とノードであり、使用する前に整数などに解析する必要があります。
どちらも素晴らしく、非常に移植性があります。ただし、JSONはほとんどの場合に少ない文字にシリアル化されるため(配信時間の短縮につながります)、JavaScriptオブジェクトの構文と一致するため、メモリ内オブジェクトに直接変換できるため、Ajaxをはるかに簡単に使用できるようになり、人気が高まっています。実装。
XMLはまだ素晴らしいです。JSONは、XMLと比較して「最新かつ最高」です。
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ペイロードが同じドキュメント内で多くの異なる名前空間を使用している場合、これはすぐに失敗します。
私はこれまでのところ専門家ではありませんが、これまでにさまざまな企業で働いてきましたが、通常、小規模なデータ環境または構成値でXMLを使用します(web.configが良い例です)。
大量のデータがある場合、通常はそのデータについてレポートする必要があります。また、XMLはレポートの優れたソースではありません。物事の壮大な計画では、トランザクションデータベースはXMLよりもレポート/検索が簡単であるように見えます。
これは理にかなっていますか?上で述べたように、私は専門家ではありませんが、私の経験から、これは事実であるようです。また、開発者の波がUI(Ajax)のクライアント側またはスクリプト化されたアクションに移行し、MicrosoftのAjaxがjQueryやMooTools( YahooのYUIもそうです。JSONを使用したシリアル化可能なオブジェクトの美しい統合によります。
私は自分のVBコードにJSONシリアライザーを実装しているコードを書いています。それはあまりにも簡単で、アップグレード/変更の観点から見ると、それを打ち負かすことはできません。それは私が推測するVSに常習し続けるマイクロソフトの方法です。最近、エンタープライズアプリケーションを(jQueryを介して)Ajaxを使用し、JSON形式を使用するように変換しました。完了するまでに約2週間かかりました。統合しないと、かなりの追加コードを書かなければならなかったので、私は実際にMicrosoftに統合してくれたことに感謝しています。