【发布时间】:2018-06-28 02:30:28
【问题描述】:
我使用 JSON 通过 API 为客户端发送数据。 我的数据是一个 JSON 对象数组,每个 数组中的对象具有相同的类型, 并且键值对所有人都是相同的。 重复无用的键名消耗了 70% 的请求。 有没有办法在没有这种开销的情况下发送数据?
“我知道像 csv 这样存在某种方式,但我想为这个问题选择通用解决方案”
例如我的数组在 json 5Mb 和在 csv 它只有 500kb
一个简单的json数组
var people = [ { firstname:"Micro", hasSocialNetworkSite: false, lastname:"Soft", site:"http://microsoft.com" }, { firstname:"Face", hasSocialNetworkSite: true, lastname:"Book", site:"http://facebook.com" }, { firstname:"Go", hasSocialNetworkSite: true, lastname:"ogle", site:"http://google.com" }, { firstname:"Twit", hasSocialNetworkSite: true, lastname:"Ter", site:"http://twitter.com" }, { firstname:"App", hasSocialNetworkSite: false, lastname:"Le", site:"http://apple.com" }, ];
上面的数组是 csv 格式的
"firstname","hasSocialNetworkSite","lastname","site" "Micro","False","Soft","http://microsoft.com" "Face","True","Book","http://facebook.com" "Go","True","ogle","http://google.com" "Twit","True","Ter","http://twitter.com" "App","False","Le","http://apple.com"
你可以看到例子中对象的json数组的表现。
【问题讨论】:
-
"你可以看到json数组的表现和...." 还有什么?
-
这是使用诸如 JSON API 之类的模式或对数据库进行一些规范化的好处。
-
以压缩形式发送内容。
gzip应该在重复的内容上做得很好。或者使用较短的键名。单字母键名将适用于您展示的示例。如果另一端需要长键名,并且您不想在接收方编写特定逻辑以将短键名映射到每种消息类型的长键名,则发送短到长名称映射为请求的一部分。 -
gzip 不是很好的解决方案,就像是“那只猫在偷奶油时闭上了眼睛”::
-
“文件大小”不是“性能”。处理json完全有可能更快。此外,compressed streams are part of the standards of http communication.
标签: arrays json csv bson data-transfer-objects