Упрощение структуры 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"
                        }
                    ]
                }
            ]
        };

Ответ 1

Да, вы можете немного упростить это:

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% -ное сокращение.

Ответ 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"
                ]
        }
    ]
}

Ответ 3

Надеюсь, это упростит это для вас! Json должен быть написан таким образом, чтобы он был минимальным и понятным для компьютеров и людей.

var cooking = {
            "recipes" :
            [           
            {
                "name":"pizza",
                "cheese": "100g"
                "tomato": "200g"
            }           
            ,
            {
                "name":"pizza 2",
                "ham": "300g"
                "pineapple": "300g"
            }
            ]
            }
    };