web-dev-qa-db-ja.com

XML vs YAML vs JSON

他のプロジェクトに依存しないプロジェクトを最初から開始していると仮定します。 XMLのような形式を使用してフィードを保存したいのですが、この種の利用可能な形式はXMLだけではないので、知りたいのですが、なぜ残りの形式よりも1つを選択する必要があるのでしょうか。

Perlを使用します。

「フィード」は製品の説明です(名前、価格、タイプ、簡単な説明、最大120語)。

28
snoofkin

もっと多くのことを知らなければ、私たちは本当にそれに答えることはできません。現在他のプロジェクトに依存していないという理由だけで、将来のある時点でそれらと対話する可能性がありますか?もしそうなら、彼らはどの技術を好みますか? BBCでは、「JSONのみ」のプロジェクトがいくつかありましたが、Java APIにアクセスしたい開発者は懇願提供してくれました)単純なXMLAPIは、XMLを中心に構築されたツールが非常に多いためです。名前付けや属性などは気にせず、それらの山形文字が必要でした。

「フィードの保存」についても、どういう意味かわかりません。フィード内のデータについて説明しますが、それらのフィードをどのように処理しますか?それらを解析しますか?それらをキャッシュして予約しますか?それらを楔形文字の錠剤に書きますか? :)

実際に必要なのはデータベースであり、そこにデータを永続化し、後でJSON/YAML/XMLまたは任意の形式でシリアル化できるようにしたいようです。私がお勧めするのは、データをPerlデータ構造に引き出して、そのデータ構造を目的の出力にシリアル化する方法を知っている「フォーマッター」を用意することです。そうすれば、たとえばJSONにシリアル化でき、後でそれでも不十分な場合は、YAMLなどに簡単に切り替えることができます。実際、他の人があなたのデータを必要としている場合(一方向のデータは役に立たない傾向があります)、JSON、YAML、XMLなどを要求できます。あなたはより柔軟性があり、あなたが前もって下した決定に縛られることはありません。

そうは言っても、私はあなたのシステムを知らないので、正しいことを言うのは難しいです。また、JSONとYAMLがXMLと完全に互換性があるわけではありません。微妙な違いがあなたをつまずかせる可能性があります。

29
Ovid

それぞれが仕事をします。

JSONには、JavaScriptでの解析が非常に簡単であるという利点がありますが、おそらく他の言語のライブラリを見つけて導入する必要があります。

XMLには、より多くの言語が関連するライブラリをバンドルするという利点があり、言及したストレージに役立ちます。したがって、「移動中」と「静止中」の両方のさまざまなシステムを通過するのに役立ちます。

YAMLにはすべての言語のライブラリがありますが、あまり一般的に使用されていないため、ライブラリを見つけて導入する必要があります。

23
Joshua Fox

XMLは他の人たちによって徹底的に説明されていると思います。ただし、YAMLとJSONはどちらも洗練された言語であり、一見しただけでは信じられないほど似ていません。

いくつかの YAMLに関する特殊性

  • 参照

    - person: &id002
        name:   James
        age:    5.0
    
    - person: *id001
    

    2人目は、1人目と同じ連想配列です。

  • データ型のキャスト

    foobar: !!str 123
    

    foob​​arは「123」(タイプ文字列)です。

  • すべての実装でサポートされているわけではない珍しいデータ型

    ウィキペディア:

    特に興味深いのは、セット、順序付けられたマップ、タイムスタンプ、および16進数です。

したがって、JSONははるかに単純だと思います。

JSONの引数

JavaScriptだけではありません

JavaScriptを使用しない場合、アプリケーションに「JavaScript Object Notation」を使用するのはばかげているように見えるかもしれませんが、JSONで提供されるデータ型はおそらくあなたの言語でも最も一般的なものであるため、とにかくそれを検討する必要があります。

空白がオプションの場合でも読み取り可能

JSONは、一度きれいにすると非常に読みやすく、非常に簡単に実行できると思います。 YAMLは空白に依存しているため、コンパクトにするのは困難です。確かに、帯域幅を節約するには圧縮に依存する必要があります。 YAMLでの参照により、数バイト節約できる場合がありますが、複雑さが増します。重複を避けることが重要となる大量のデータを実際に扱っている場合は、その問題をまったく別のレベルで解決することをお勧めします。 XMLでさえこの種のマクロをサポートしていません。

18
Janus Troelsen

制御していないシステムと相互運用する必要がある場合(XMLスキーマはここでは非常に重要です)、データをテキスト、HTML、またはXMLに広範囲に変換する場合(それにもかかわらず、XSLTは比類のないものです)、データに含まれている場合はXMLを選択しますデータを人間が編集できるようにする必要がある場合(それにもかかわらず、スキーマに対して検証された編集可能なXMLは多くのジョブにとって非常に優れたツールです)、および/または無数のいずれかを相互運用する必要がある場合は、多くのテキストマークアップXMLで動作するツールとテクノロジーの一覧です。

上記のいずれにも本当に悩まされない場合は、JSONを選択してください。

多くのYAMLサポートがある環境で作業している場合は、YAMLを選択してください。

10
Robert Rossney

JSONが私の選択です。 JSONとYAMLは軽量で、使い始めるのが簡単です(正式なスキーマは必要ありません)。 JSONはより広く使用されており、YAML以外のさまざまなテクノロジーとの互換性があります。たとえば、PHPには、YAMLではなくJSONをデコードまたはエンコードする組み込み関数があります。JavaScriptは、有効なJavaScriptの厳密なサブセットであることを考えると、もちろんJSONが大好きです。

7
Alan H.

私はジョーに同意します。たとえば、JavaScriptアプリの場合。 jsonは有力な候補です。個人的には、jsonを使用するのはほぼすべてですが、それが最も快適なためです。

7
orolo

あなたのニーズに依存します。小さくて軽量なアプリの場合、私は個人的にXMLはやり過ぎだと思います: http://www.codinghorror.com/blog/2008/05/xml-the-angle-bracket-tax.html

その場合、私はYAMLを好みます。 javascriptとの対話には、jsonを使用します。本当に独自の文法を定義する必要がある場合(読み取り:スキーマ)、xmlがそれです。非常に強力です。何をしようとしているのかを判断する必要があります。そうしないと、質問が広すぎて明確な答えが得られません。

6
Joe

データが階層的でない場合、またはデータが散在する場合、たとえば、説明This product is great for <targetDemo/> who love it's <featureSet/>)、カンマ区切り値[〜#〜] csv [〜#〜 ])またはタブ区切りのような他の形式。

それは古い学校ですが、たくさんの説明テキストでファイルを圧迫することなく仕事を成し遂げます。つまり、XMLでは、フィードごとに次の非値データがあります。

<feed name="" price="" type="" description=""/>

... CSVと対比:

"", , "", ""

必要に応じて、ドキュメントの目的で上部にヘッダー行を追加できます。

AwkのようなコマンドラインユーティリティからExcelのようなGUIまで、CSVに関するツールもたくさんあります。

別の方法として、テキストエディターでデータを編集する必要はないが、より堅牢なデータベースサービスをデプロイしたくない場合は、 SQLite を使用すると、RDBMSスタイルを実行できます。フラットバイナリファイルに対するCRUD操作。

3
steamer25

相互運用性の懸念がないので、私はそれに多くはないと思います。すべての言語でそれらすべてに適したライブラリがあります。組み込みのものもあれば、組み込まれていないものもあります。これらのライブラリへのインターフェイスは、データアクセスコードだけで狭くなるため、APIが面倒な場合でも、それはそれほど重要ではありません。

JSONは、私にとって、手作業で編集するのが最も快適です。これは小さなプラスです。

YAMLは、&/ *表記を使用して非ツリーデータ構造を処理できます。 XMLもJSONも、それを行うための組み込みの方法はありません。しかし、あなたの使用はそれを必要としません。

1
Tom Anderson

Xmlはビッグデータ用であり、jsonは配列の複数の次元を必要としない小さくて複雑すぎないデータ用だと思います。私は間違っているかもしれません。 ^^そして私はグーグルアプリエンジンでyamlしか見ません。私には思えますが、アプリケーションの設定やデータを保存するのに非常に適しています。

0
wizztjh