如何减少此 JSON 记录的大小?

问题描述

我正在努力减少我的数据库记录的大小。每条记录平均约为 5Kb,其中 97% 被单个数组属性使用。

这个数组描述了图像上的对象及其边界框,描述为一系列点:

[
    {
      "s": 0,"e": 6,"w": "Ihandle","b": [
        { "x": 0.08816705336426914,"y": 0.1531684174855981 },{ "x": 0.2523201856148492,"y": 0.15249068112504235 },"y": 0.17926126736699424 },{ "x": 0.08816705336426914,"y": 0.17993900372754998 }
      ]
    },{
      "s": 8,"e": 16,"w": "financial","b": [
        { "x": 0.08584686774941995,"y": 0.1762114537444934 },{ "x": 0.25696055684454755,"y": 0.2016265672653338 },{ "x": 0.08584686774941995,"y": 0.2016265672653338 }
      ]
    },{
      "s": 18,"e": 29,"w": "transactions","b": [
        { "x": 0.016241299303944315,"y": 0.20060996272450016 },{ "x": 0.25928074245939675,"y": 0.19959335818366655 },"y": 0.22636394442561844 },{ "x": 0.016821345707656612,"y": 0.22738054896645205 }
      ]
    },...
]

关于这些要点:

  • 总是正好 4 分
  • 点并不总是彼此平行
  • 不需要超过 1/1000 的精度

我想知道,有什么方法可以减少有效载荷的大小吗? (最终目标是在像 Algolia 这样的全文搜索服务中索引这些记录)

解决方法

  • 您可以缩小 JSON,这样可以节省一点空间。您仍然可以以格式化的方式漂亮地打印它。
  • 如果您不需要完整的精度,您可以删除一些数字并将数字缩短为“0.016821”之类的内容
  • 边界框可以这样表达:Point(x,y) + Width + Height。那将是 4 个数字而不是 8 个!

编辑:那些坐标呢?数字看起来像是代表屏幕宽度和高度的一小部分(就像画布一样)。当然,您可以降低精度,但如果您的分辨率是固定的,您可以使用整数。与“0.016821345707656612,0.22738054896645205”相比,“1024,800”的字符要少得多。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...