jsonデータ圧縮


jsonは非常に簡単で読みやすいデータ構造です.通常、開発時にjsonをデータ転送フォーマットとして選択します.同時に、パフォーマンスを向上させ、帯域幅を低減するために、jsonデータを圧縮するのが一般的です.今日はいろいろな圧縮方法についてお話しします.
1、一般圧縮:
デフォルトのjsonデータは改行があるので、最も簡単な圧縮方法はjsonの中の戻り行を改行して1行の文字列に圧縮することです.
テスト:大きなjson文字列を探しました.元のサイズは1.1 mで、戻り改行を除いて1行に圧縮すると、サイズは360 kになります.
オンライン圧縮ツール:https://www.bejson.com/
次に、jsonのkeyを短くしたり、意味を規定すれば意味のない記号を設定したりすることもできます.これにより、jsonのサイズを減らすことができます.
2、gzip、deflateアルゴリズムを使用して圧縮する:
json自体がテキスト情報であるため,gzip,deflateなどのアルゴリズムを用いて圧縮することができ,いずれもハーバースロー符号化を用いた無損データ圧縮アルゴリズムであり,テキストコンテンツの圧縮比が高く,ほぼ80%以上である.ほとんどのブラウザも、httpプロトコルの応答エンティティを圧縮するために、この2つの方法を使用しています.
ここでは多くの例を挙げますが、興味のある同級生は自分で試してみることができます.
3、CJSONとHPack圧縮アルゴリズム:
どちらもjsonデータ構造圧縮のためのアルゴリズムである.その主な考え方は,元のjsonデータをTemplateとValueに抽出し,重複する「Key値」を節約することである.1)cjson圧縮:
たとえば、元のjson:
[
    {
        "x": 100,
        "y": 100
    },
    {
        "x": 100,
        "y": 100,
        "width": 200,
        "height": 150
    },
    {},
]

cjson圧縮を使用すると、次のようになります.
{
    "templates": [
        [0,"x","y"],
        [1,"width","height"]
    ],
    "values": [
        {
            "values": [1,100,100 ] 
        },
        {
            "values": [2,100,100,200,150 ] 
        },
        {}
    ]
}

2)hpack圧縮:
hpackは、無傷で言語にまたがり、パフォーマンスを重視するデータセット圧縮プログラムです.汎用同性集合を表す文字数を70%削減できます.このアルゴリズムは、0から4までの複数のレベルの圧縮を提供します.レベル0圧縮は、構造からキー(属性名)を削除することによって最も基本的な圧縮を実行し、インデックス0に各属性名を持つヘッダを作成します.次のレベルでは、重複するエントリが存在すると仮定することで、JSONのサイズをさらに小さくすることができます.元のjson:
[{
 
  name : "Andrea",
 
  age : 31,
 
  gender : "Male",
 
  skilled : true
 
}, {
 
  name : "Eva",
 
  age : 27,
 
  gender : "Female",
 
  skilled : true
 
}, {
 
  name : "Daniele",
 
  age : 26,
 
  gender : "Male",
 
  skilled: false
 
}]

圧縮後:
[
    [ "name","age","gender","skilled"],
    ["Andrea",31,"Male", true],
    [ "Eva", 27,"Female",true],
    ["Daniele",26,"Male",false]
]

結論:両方の方法は主にjsonのキーを抽出してインデックスを統一することであるが、最後のフォーマットが異なるだけで、HPackの簡略化後のフォーマットはCJSONより多くの文字が少ないため、HPackの圧縮効率が高く、JSONの内容が少なすぎると、CJSONの資料はかえって多くなる可能性がある.
参照先:
https://blog.csdn.net/ZYC88888/article/details/104697362