【发布时间】:2017-05-22 03:09:44
【问题描述】:
摘要:
在 json 格式中,我们有键值对。对于每个对象,重复相同的键。这不是冗余吗?是否可以将其更改为数据库表格式,其中第一行具有所有键,下一行表示具有值的对象。
详情:
据说 xml 因为它的结束标签而更加冗长和冗余。所以替代方案是json。但我发现 json 太多余了。我发现的冗余是:
- 每个对象实例中的重复键。
- 每个键和值的名称都使用不必要的双引号。
对于 2,我发现一个解释是,由于 javascript 不允许保留关键字,如 function、if、else 作为键,Crockford 先生想保持 json 简单,他选择使用引号。
问题1:我们为什么不让json解析器在数据到达客户端时添加引号,而不是在json数据中使用引号?例如。服务器应发送数据为:
[
{
product: car,
price: 100
},
{
product: bus,
price: 1000
}
]
json 解析器应该在客户端将其转换为:
[
{
"product": "car",
"price": "100"
},
{
"product": "bus",
"price": "1000"
}
]
现在让我们谈谈第一点。假设我们在 json 中有如下数据:
[
{
"product": "car",
"price": "100"
},
{
"product": "bus",
"price": "1000"
},
{
"product": "Train",
"price": "100000"
}
]
这里,product 键重复了 3 次,price 键也重复了 3 次。在表数据库格式中,此数据将是:
+=========+===================+
| product | price |
+=========+===================+
| car | 100 |
+---------+-------------------+
| bus | 1000 |
+---------+-------------------+
| train | 100000 |
+---------+-------------------+
在表格格式中,product 和 price 没有重复。所以这种格式一定是最优格式。为了在 json 中实现这一点,我想出了以下方法:
- 类似数组的表格:
+=------------------------- //用于格式化以下代码
[
["product", "price"],
["car", "100"],
["bus", "1000"],
["train", "100000"]
]
我们有很多数组。可能还有其他改进:
- 所有键的单独数组和所有值的另一个单独数组:
+-=--------- //用于格式化下面的代码
[
["product", "price"],
["car", "bus", "train"],
["100", "1000", "100000"]
]
现在将只有三个数组。这是最优化的方法,可以稍微改进以使其更有意义:
{
"product": ["car", "bus", "train"],
"price": ["100", "1000", "100000"]
}
现在我们看到可以去除 json 中的冗余。
问题2:是不是json是冗余的,格式还可以进一步改进?
我的想法是,在某些情况下,每个对象的数据不会有相同的键,所以我的方法不适合它们。因此,开发人员可以根据实际需要重新格式化 json。另一种想法是,当 gzipped 的大小与原始 json gzipped 文件大小相同时,这可能是我的格式。
问题 3: 如果 json 数据的所有对象都具有相同的键,那么我的 gzip 压缩格式是否比原始 json gzip 压缩文件的大小更小?
【问题讨论】:
-
特别需要引号,否则您将开始遇到空白控制问题。例如:描述,如果您的产品价格示例有描述,它将是多个单词,没有引号,您的解析器可能会遇到问题和歧义。
-
@ChrisWatts 如果所有描述值都用逗号分隔,怎么会有歧义?逗号可以像双引号一样充当分隔符。
-
考虑非结构化数据。然后 JSON 格式可以防止数据中出现大量不必要的“空白”。任何人:请随意详细说明/改进这个作为答案,我没有时间:-)
-
@user31782 考虑以下几点:
"description" : "a meaningful description of the product, created by me", ...和description : a meaningful description of the product, created by me,第二个不会解析,因此开始限制您支持的字符集。 csv格式也是一样,都是用引号来封装数据,防止解析错误。 -
@ChrisWatts
commas可以用斜杠转义,就像双引号是普通的 json 格式一样。我认为这是"与,。可能有人认为commas在文本中比quotes更常见——所以我们应该使用逗号。使用EOF之类的东西作为分隔符怎么样?
标签: javascript json xml database optimization