1. ホーム
  2. xml

[解決済み】JSONとXMLの比較【クローズド

2022-04-02 11:34:08

質問

どちらが速いか知りたい。XMLとJSONのどちらが速いのか? いつ、どちらを使えばいいのでしょうか?

どのように解決するのですか?

いつ、どれを使うか答える前に、少し背景を説明します。

編集部:この比較は、あくまでブラウザ上でJavaScriptを使って使う場合の視点であることをお伝えしておきます。どちらのデータ形式も があります。 また、優れたパーサーはたくさんあり、細部を変更することで、私が言っていることは全く妥当ではなくなります。

JSONは、よりコンパクトで、(私の見解では)より読みやすく、転送時のデータ量が少ないので、より速く転送できます。

パースに関しては、パーサーに依存します。コード(JSONであれXMLであれ)を(マップのような)データ構造に変換するパーサーは、XMLの厳密な性質から恩恵を受けることがあります(以下、「XML」)。 XML スキーマ しかし、JSONでは、アイテムのタイプ(文字列/数値/入れ子のJSONオブジェクト)は構文的に推測することができます。

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");

EDIT:オリジナルです。

<ブロッククオート

ほとんどのプログラミング言語では(すべてではありませんが)、このようなマップ検索は、属性検索(JSONをパースしたときに上で得たような)よりもコストが高くなります。

これは誤解を招きやすい。JavaScript(および他の動的言語)では 差はない マップルックアップとフィールドルックアップの間。実際、フィールドルックアップは は単なるマップルックアップです。

本当に価値のある比較をしたいのであれば、ベンチマークを行うのが一番です。ベンチマークは、そのデータを使う予定のコンテキストで行ってください。

私がタイプしている間に、Felix Klingがすでに、それぞれをいつ使うかという観点から比較したかなり簡潔な答えを出しているので、これ以上は省略します。