0

ご存知のように、JSON は XML よりも軽量なデータ形式であり、使用するのに適しています。しかし、同じ構造を持つオブジェクトの大きな配列を転送すると、JSON もデータでオーバーロードされます。例えば:

[
    {
        name: 'John',
        surname: 'Smith',
        info: { age: 25, comments: '' }
    },
    {
        name: 'Sam',
        surname: 'Black',
        info: { age: 27, comments: '' }
    },
    {
        name: 'Tom',
        surname: 'Lewis',
        info: { age: 21, comments: '' }
    }
]

namesurnameageおよびcommentsトリプル宣言は、すべての配列オブジェクトが同じ構造を持っていることを正確に知っていれば役に立ちません。
そのような配列データを縮小し、十分に柔軟にできるデータ形式はありますか?

4

2 に答える 2

2

確かに、これはハックなソリューションですが、私たちはそれを使用しており、機能しています。すべてを配列にフラット化できます。たとえば、上記は次のように表されます。

[
    ['John','Smith',[24,'']],
    ['Sam','Black',[27,'']],
    ['Tom','Lewis',[21,'']]
]

欠点は、シリアル化/逆シリアル化の際に、いくつかのカスタム ロジックを実行する必要があることです。ただし、これにより、テキストベースのソリューションでは追加の節約が得られます。Ray は正しいです。本当に最大限の節約が必要な場合は、バイナリが最適です。

于 2011-08-03T06:44:21.220 に答える
1

テキスト形式の場合、YAML は最小限のマークアップを使用しようとします。セミコロンとブレースをほとんど取り除きます。しかし、テキストはかなりよく圧縮されます。

ただし、プロパティ名の冗長性を取り除きたい場合は、バイナリ形式を使用する必要があります。MessagePack、Protocol Buffers、または Avro を調べてください。この種の冗長性を取り除くテキストベースのフォーマットは知りません。

後期追加:

過去 1 年間、Hadoop を使用して一度に数十ギガバイトを処理した後、どうして CSV を忘れたのでしょうか? もう。最初の行はスキーマにすることができ、実際には引用符は必要ありません。そしてセパレーターはあなた次第です。このようなもの:

name|surname|infoage|infocomments
John|Smith|24|
Sam|Black|27|Hi this is a comment
Tom|Lewis|21|This comment has an \| escaped pipe

小さなドキュメントの場合、一部のバイナリ形式よりも小さい場合がありますが、バイナリは実数を格納するのに適しています。

また、CSV は、すべて同じアイテムのコレクションがある場合にのみ有効です。複雑なオブジェクト階層の場合は、バイナリ、YAML、または @incaren の配列ベースのソリューションを使用してください。

于 2011-08-03T06:37:59.070 に答える