我有以下JSON结构,但我想知道是否有任何方法可以进一步简化它。可以以某种方式从所有条目中删除“成分”和“数量”以帮助减少它吗?
var cooking = {
"recipes" : [
{
"name":"pizza",
"ingredients" : [
{
"ingredient" : "cheese",
"quantity" : "100g"
},
{
"ingredient" : "tomato",
"quantity" : "200g"
}
]
},
{
"name":"pizza 2",
"ingredients" : [
{
"ingredient" : "ham",
"quantity" : "300g"
},
{
"ingredient" : "pineapple",
"quantity" : "300g"
}
]
}
]
};
答案 0 :(得分:15)
是的,你可以简化一下:
var recipes = {
"pizza": {
"cheese": "100g",
"tomato": "200g"
},
"pizza 2": {
"ham": "300g",
"pineapple": "300g"
}
}
解释:
示例的顶级是单项对象:{"recipes": <...>}
。除非这是一个实际上有其他项目的对象的简化版本,否则这是多余的。您的代码知道它发送/接收的内容,因此没有额外的信息。
{"recipes": <...>}
对象的值是一个包含两个项目对象的数组,其中包含"name"
和"ingredients"
个键。每当你有这样的数组时,用对象替换它就更有意义(并且更紧凑)。根据经验:
如果对象数组中的键可以被
"key"
和"value"
替换,但仍然有意义,请用一个{"key_name": <value>, ...}
对象替换该数组。
同样的规则适用于您的[{"ingredient": <...>, "quantity": <...>}, ...]
数组:每个对象都可以替换为键值对并继续有意义。
最终结果是,这个信息的表示长度为87个字符(删除了无关的空格),与原始的249个字符相比 - 减少了65%。
答案 1 :(得分:3)
当然。一种方法是:
var cooking = {
"recipes" : [
{
"name":"pizza",
"ingredients" : [
"cheese",
"tomato"
],
"quantities" : [ // Have to be in order of ingredients
"100g",
"200g"
]
}
]
}
或
var cooking = {
"recipes" : [
{
"name":"pizza",
"ingredients" : [ // Putting ingredient and quantity together
"cheese:100g",
"tomato:200g"
]
}
]
}
由于它们都是披萨,因此您可以删除该名称。
var cooking = {
"recipes" : [
{
"ingredients" : [
"cheese:100g",
"tomato:200g"
]
},
{
"ingredients" : [
"ham:100g",
"pineapple:200g"
]
}
]
}
答案 2 :(得分:0)
希望这能为您简化! Json必须以某种方式编写,以便它对计算机和人类都是最小的和易于理解的。
var cooking = {
"recipes" :
[
{
"name":"pizza",
"cheese": "100g"
"tomato": "200g"
}
,
{
"name":"pizza 2",
"ham": "300g"
"pineapple": "300g"
}
]
}
};