特に次のことを考慮して、YAML と JSON の違いは何ですか?
- パフォーマンス (エンコード/デコード時間)
- メモリ消費量
- 表現の明瞭さ
- ライブラリの可用性、使いやすさ (私は C の方が好き)
これら 2 つのうちの 1 つを組み込みシステムで使用して構成ファイルを保存することを計画していました。
特に次のことを考慮して、YAML と JSON の違いは何ですか?
これら 2 つのうちの 1 つを組み込みシステムで使用して構成ファイルを保存することを計画していました。
技術的には、YAML は JSON のスーパーセットです。つまり、少なくとも理論的には、YAML パーサーは JSON を理解できますが、必ずしもその逆であるとは限りません。
「YAML: Relation to JSON」というタイトルのセクションの公式仕様を参照してください。
一般に、JSON では利用できない YAML の好きな点がいくつかあります。
実際には、これらの最後の 2 つのポイントのいずれも、あなたや私が行うことには問題になりませんが、長期的には、YAML はより堅牢で実行可能なデータ シリアライゼーション フォーマットになると思います。
現在、AJAX やその他の Web テクノロジは JSON を使用する傾向があります。YAML は現在、オフライン データ プロセスでより多く使用されています。たとえば、C ベースの OpenCV コンピューター ビジョン パッケージには既定で含まれていますが、JSON は含まれていません。
JSON と YAML の両方の C ライブラリがあります。YAML のライブラリは比較的新しい傾向にありますが、私は過去に問題を経験したことはありません。たとえば、Yaml-cppを参照してください。
違い:
{a: &b [*b]}
で再帰構造を記述することは可能ですが、一部のコンバーターでは無限にループします。循環検出を使用しても、「yaml 爆弾」は依然として可能です ( xml 爆弾を参照)。所見:
これは、詳細ではなく、タイトルに答えます。ほとんどの場合、私のように Google の検索結果からタイトルを読むだけなので、Web 開発者の観点から説明する必要があると感じました。
JavaScript が圧倒的な差で Web を支配していることは明らかであり、JavaScript 開発者は一般的な Web API と共にデータ形式として圧倒的に JSON を使用することを好みます。チーム環境で。実際、Web プログラマーの大半は、YAML の存在にさえ気づいておらず、ましてや YAML の使用を検討していません。
Web プログラミングを行っている場合、JavaScript を使用する場合は変換手順が必要ないため、JSON がデフォルトの方法です。その場合、JSON ではなく YAML を使用するためのより良い議論を考え出す必要があります。
この質問は 6 年前のものですが、不思議なことに、4 つのポイント (速度、メモリ、表現力、移植性) のすべてに実際に対応している回答はありません。
明らかにこれは実装に依存しますが、JSON は非常に広く使用されており、実装が非常に簡単であるため、より多くのネイティブ サポートを受ける傾向があり、したがって速度が速くなります。YAML は JSON が行うすべてのことを行い、さらにトラック 1 台分以上を行うことを考慮すると、両方の同等の実装のうち、JSON の方が高速になる可能性があります。
ただし、YAML ファイルは対応する JSON ファイルよりもわずかに小さい可能性があるため (文字数が少ないため)、"
例外的な状況では、高度に最適化された YAML パーサーの方が高速である可能性があります。,
基本的に同じ議論が成り立ちます。同じデータ構造を表している場合、YAML パーサーが JSON パーサーよりもメモリ効率が高い理由を理解するのは困難です。
他の人が指摘しているように、Python プログラマーは YAML を好む傾向があり、JavaScript プログラマーは JSON を好む傾向があります。私はこれらの観察を行います:
JSON ライブラリのない最新の言語を想像するのは困難です。また、完全な仕様に満たないものを実装する JSON パーサーを想像することも困難です。YAML は広くサポートされていますが、JSON ほどユビキタスではなく、各パーサーは異なるサブセットを実装しています。したがって、YAML ファイルは、思ったよりも相互運用性が低くなります。
JSON は、パフォーマンス (関連する場合) と相互運用性の勝者です。人間が管理するファイルには YAML の方が適しています。HJSONはかなりの妥協点ですが、移植性は大幅に低下します。JSON5は、構文が明確に定義された、より合理的な妥協案です。
他の答えは良いです。最初にそれらを読んでください。しかし、YAML を時々使用するもう 1 つの理由を追加します: git。
多くのプログラミング プロジェクトでは、配布とアーカイブに git リポジトリを使用することがますます増えています。また、git リポジトリの履歴は JSON ファイルと YAML ファイルを同等に保存できますが、ファイルへの変更を追跡および表示するために使用される「diff」メソッドは行指向です。YAML は行指向であることを余儀なくされているため、YAML ファイルの小さな変更は人間にとって簡単に確認できます。
もちろん、文字列/キーを並べ替えてインデントを追加することで、JSON ファイルを「きれいに」できることは事実です。しかし、これはデフォルトではなく、私は怠け者です。
個人的には、システム間のやり取りには一般的に JSON を使用します。構成ファイル、静的ファイル、および追跡ファイルに YAML をよく使用します。(私は通常、YAML リレーショナル アンカーを追加することも避けています。人生はループを追い詰めるには短すぎます。)
また、速度とスペースが本当に問題になる場合は、どちらも使用しません。BSON を参照してください。
YAML の方が見やすいと思います: 括弧が少なく、"" などです。YAML にはタブの煩わしさがありますが...しかし、こつをつかむことができます。
パフォーマンス/リソースに関しては、2 つの間に大きな違いはないと思います。
さらに、構成ファイルについて話しているので、エンコード/デコード アクティビティの頻度が高いとは思わないでしょうか?
技術的には、 YAMLはJSONよりも多くの機能を提供します (YAML v1.2 は JSON のスーパーセットです)。
アンカーと継承 - 3 つの同一項目の例:
item1: &anchor_name
name: Test
title: Test title
item2: *anchor_name
item3:
<<: *anchor_name
# You may add extra stuff.
ほとんどの場合、人々はこれらの追加機能を使用しません。主な違いは、YAML はインデントを使用するのに対し、JSON はブラケットを使用することです。これにより、YAML はより簡潔で読みやすくなります(熟練した目にとって)。
どちらを選ぶ?
YAML にあり、JSON にはない機能が必要ない場合は、非常にシンプルで広くサポートされている (多くの言語で多くのライブラリがある) ため、JSON をお勧めします。YAML はより複雑で、サポートが少ないです。解析速度やメモリ使用量が大きく変わるとは思いませんし、プログラムのパフォーマンスの大部分を占めることはないでしょう。
この質問は現在、YAML と JSON を検索する際に目立つようになっているため、めったに引用されない 2 つの違い、つまりライセンスに注目する価値があります。JSON は、 JSON ユーザーが遵守しなければならないライセンスを持っていると主張しています (法的にあいまいな「悪ではなく善のために使用されるものとする」を含む)。YAML にはそのようなライセンスの主張はありません。これは重要な違いかもしれません (あなたにとってでなくても、あなたの弁護士にとって)。
YAML と JSON の両方が非常に効果的であることがわかりました。私にとって、一方が他方よりもいつ使用されるかを実際に決定する唯一の2つのことは、その言語が最も一般的に使用されるものです. たとえば、Java、Javascript を使用している場合は、JSON を使用します。Java の場合、私は独自のオブジェクトを使用します。これはほとんど JSON ですが、一部の機能が欠けており、必要に応じて JSON に変換するか、そもそも JSON で作成します。これは Java では一般的なことであり、他の Java 開発者が私のコードを変更しやすくするためです。2 つ目は、プログラムが属性を記憶するために使用しているかどうか、またはプログラムが構成ファイルの形式で命令を受け取っているかどうかです。見た目の構文であり、変更が非常に簡単です。YAML の仕組みがわからなくても。次に、プログラムはそれを読み取り、JSON、またはその言語に適したものに変換します。
結局、正直どうでもいい。JSON と YAML はどちらも、経験豊富なプログラマーなら誰でも簡単に読むことができます。
解析速度の向上が懸念される場合は、データを JSON に保存することをお勧めします。ファイルが他のユーザーによって変更される可能性がある場所からデータを解析する必要があったため、JSON よりも読みやすい YAML を使用しました。また、JSON ファイルではできないコメントを YAML ファイルに追加することもできます。