简化JSON结构

时间:2013-07-28 22:14:35

标签: json

我有以下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"
                        }
                    ]
                }
            ]
        };

3 个答案:

答案 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"
            }
            ]
            }
    };