JSONは、スカラー、配列/リスト、およびマップのデータ構造(Javaでの同等物)をサポートしています。
A Set
は、そのままではJSONでサポートされていません。
JSONでセットを表す方法をいくつか考えました。
[1]-リストとして
ただし、リストには独自の順序があるため、次の2つのリストはリスト["a", "b"]
と["b", "a"]
同じではありませんが、セットと同じである必要があります。
[2]-地図として
マップのキーセットを使用し、値は無視してください。
しかし、再び、標準的な比較を使用すると、2つはマップと同じではありません。
{"a": "foo", "b": "bar"}
、 {"a": null, "b": null}
[3]-マップとして、特別な値で
スカラを取り、言う0
かnull
、またはマップのすべてのキーの値になるように強制します。
{"a": 0, "b": 0}
このように、標準の比較ツールでは、キーの順序が変更されても、オブジェクトは同じです。
ただし、この手法は、JSONドキュメントを無関係なデータで汚染します。
[4]-順序付きリストとして
最初の提案に戻りますが、今回は順序付きリストです。この種の比較問題を解決します。
ただし、並べ替えの複雑さも考慮に入れる必要があります。また、マップ表記は重複を処理しますが、並べ替えリストは処理しません。例:
{"a": 400, "a": 9}
として処理されますが{"a": 9}
、["g", "g"]
常に処理されます["g", "g"]
。
そうは言っても、リスト表記はより明確であるように見えますが、マップ表記はキーの複製に対してより堅牢であり、特別な値について一貫性を保つことが難しくなっています(null
そのための良い選択のように見えますが)。
どう思いますか?セットをJSONでどのように表現しますか?
PS
これは単にJSONに関する問題であることに注意してください。yamlのような他のフォーマットも利用できることは知っています。まだ...