2013-07-28 6 views
12

У меня есть следующая структура 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

Вы не должны беспокоиться о снижении его, если данные не передавая достаточно быстро, прямо сейчас вы должны быть более обеспокоены тем, что структура данных отображает правильное намерение – aaronman

ответ

14

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

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

Разъяснение:

  • Верхний уровень вашего примера является одним элемент объекта: {"recipes": <...>}. Если это не упрощенная версия объекта, в котором на самом деле есть другие элементы, это избыточно. Ваш код знает, что он отправляет/получает, поэтому там нет дополнительной информации.

  • Значение вашего объекта {"recipes": <...>} представляет собой массив объектов с двумя предметами, с ключами "name" и "ingredients". Всякий раз, когда у вас есть такой массив, имеет смысл (и более компактный) заменить его на объект. Как правило:

    Если ключи в массиве объектов могут быть заменены "key" и "value" и все еще имеют смысл, заменить массив с одним объекта.

  • То же правило относится и к вашему [{"ingredient": <...>, "quantity": <...>}, ...] массива: каждый объект может быть заменен парой ключ-значение и по-прежнему имеет смысл.

Конечным результатом является то, что это представление информации 87 символов в длину (с посторонними удалены пробельные), по сравнению с вашего оригинала 249 символов - снижение на 65%.

+0

Несколько смущенного о downvote ... если есть проблема с этим представлением, я этого не вижу. –

+0

Не понизил голос, но я бы сказал, это потому, что вы избавились от части «рецептов» – aaronman

+0

@aaronman Хм, может быть. Тем не менее, в примере OP это полностью избыточно. –

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" 
       ] 
     } 
    ] 
} 
+4

Я не уверен, что полагаться на порядок в массивах - лучший способ связать ингредиенты и количества. – brianestey

+0

@brianestey Это может быть не лучшее решение, но OP хочет другое решение, которое менее многословно.Первое решение использует «сыр», «томат» и т. Д. Как имена, которые действительно будут на стороне ценности. – fastcodejava

+0

Уход за тем, чтобы объяснить, почему '' сыр'' и '' томат ''не должны быть ключами в этом случае? Они, очевидно, не будут встречаться дважды в одном и том же рецепте, и одинаково очевидно всегда будут струнами. –

0

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

var cooking = { 
      "recipes" : 
      [   
      { 
       "name":"pizza", 
       "cheese": "100g" 
       "tomato": "200g" 
      }   
      , 
      { 
       "name":"pizza 2", 
       "ham": "300g" 
       "pineapple": "300g" 
      } 
      ] 
      } 
    }; 
Смежные вопросы