【问题标题】:json array of object is useless (not efficient)json对象数组没用(效率不高)
【发布时间】: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


【解决方案1】:

为什么使用 csv 文件不是“通用解决方案”?

如果你的数据是表格的,你真的不需要像 json 或 xml 这样的分层格式。

您甚至可以通过删除双引号来进一步缩小 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

【讨论】:

  • 在我的服务器上使用 csv ini 进行一些不一般的响应,因为有时我发送 csv(用于数组),有时我发送 json
  • 引号是必要的,因为应该找出','是用于分隔符或值,*值可以包含每个字符
  • @aminsaffar 没错,但您只需要为包含分隔符的字段加上引号。在示例中没有。
  • CSV has a standard,顺便说一句。如果字段包含换行符、引号或拆分字符,则确实只需要在它们周围加上引号。
猜你喜欢
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 2018-03-01
  • 2021-04-23
  • 2011-06-05
  • 1970-01-01
相关资源
最近更新 更多