12

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

3 回答 3

17

是的,您可以简化很多:

var recipes = {
    "pizza": {
        "cheese": "100g",
        "tomato": "200g"
    },
    "pizza 2": {
        "ham": "300g",
        "pineapple": "300g"
    }
}

一个解释:

  • 您的示例的顶层是一个单项对象:{"recipes": <...>}. 除非这是一个实际包含其他项目的对象的简化版本,否则这是多余的。您的代码知道它正在发送/接收什么,因此那里没有额外的信息。

  • 您的{"recipes": <...>}对象的值是一个包含两项对象的数组,键为"name""ingredients"。每当您有这样的数组时,将其替换为对象会更有意义(并且更紧凑)。根据经验:

    如果对象数组中的键可以替换为"key"并且"value"仍然有意义,则将数组替换为单个{"key_name": <value>, ...}对象。

  • 相同的规则适用于您的[{"ingredient": <...>, "quantity": <...>}, ...]数组:每个对​​象都可以替换为键值对并继续有意义。

最终结果是,与原始的 249 个字符相比,此信息表示的长度为 87 个字符(去除了多余的空格) - 减少了 65%。

于 2013-07-28T22:23:07.007 回答
2

确实。一种方法是:

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"
                ]
        }
    ]
}
于 2013-07-28T22:24:37.037 回答
0

希望这可以为您简化!Json 必须以某种方式编写,以便计算机和人类都可以理解它。

var cooking = {
            "recipes" :
            [           
            {
                "name":"pizza",
                "cheese": "100g"
                "tomato": "200g"
            }           
            ,
            {
                "name":"pizza 2",
                "ham": "300g"
                "pineapple": "300g"
            }
            ]
            }
    };
于 2015-05-18T06:16:10.557 回答