2013-07-28 18 views
12

Mam następującą strukturę JSON, ale zastanawiam się, czy byłby jakiś sposób, aby ją jeszcze bardziej uprościć. Czy jakikolwiek "składnik" i "ilość" mogą zostać usunięte ze wszystkich wpisów, aby pomóc je zmniejszyć?Uproszczenie struktury 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

Nie należy się martwić o zmniejszenie go, chyba że dane nie są przenoszone na tyle szybko, teraz powinno być bardziej obawiają się, że struktura danych wyświetla prawidłową intencję – aaronman

Odpowiedz

14

Tak, można uprościć, że całkiem sporo:

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

Wyjaśnienie:

  • Górny poziom swojej przykładem jest przedmiotem jednorazowego pozycja: {"recipes": <...>}. O ile nie jest to uproszczona wersja obiektu, który faktycznie zawiera inne elementy, jest to zbędne. Twój kod wie, co wysyła/otrzymuje, więc nie ma tam dodatkowych informacji.

  • Wartość twojego obiektu {"recipes": <...>} jest tablicą obiektów z dwoma przedmiotami, z kluczami "name" i "ingredients". Ilekroć masz taką tablicę, ma ona więcej sensu (i jest bardziej zwarta), aby zastąpić ją obiektem. Jako zasada:

    Jeśli klucze w tablicy obiektów może być zastąpiona przez "key" i "value" i nadal sensu, wymienić tablicę z jednym obiektu.

  • Ta sama zasada odnosi się do tablicy [{"ingredient": <...>, "quantity": <...>}, ...]: każdy obiekt może być zastąpiony przez parę klucz-wartość i nadal sensu.

Końcowym rezultatem jest to, że ta reprezentacja informacji ma 87 znaków (ze zdjętą obce spacje), w porównaniu z oryginałem w 249 znaków - zmniejszenie 65%.

+0

Nieco mylić o downvote ... jeśli istnieje problem z tą reprezentacją, nie widzę tego. –

+0

Nie oddałem głosu, ale powiedziałbym, że to dlatego, że pozbyłeś się "przepisów" z części – aaronman

+0

@aaronman Hmm, być może. W przykładzie OP jest to jednak całkowicie zbędny. –

3

Zdecydowanie. Jednym ze sposobów byłoby:

var cooking = { 
     "recipes" : [ 
      { 
       "name":"pizza", 
       "ingredients" : [ 
        "cheese", 
        "tomato" 
        ], 
        "quantities" : [ // Have to be in order of ingredients 
         "100g", 
         "200g" 
       ] 
      } 
     ] 
    } 

Albo

var cooking = { 
    "recipes" : [ 
     { 
      "name":"pizza", 
      "ingredients" : [ // Putting ingredient and quantity together 
       "cheese:100g", 
       "tomato:200g" 
       ] 
     } 
    ] 
} 

Ponieważ są one wszystkie pizze można usunąć nazwę.

var cooking = { 
    "recipes" : [ 
     { 
      "ingredients" : [ 
       "cheese:100g", 
       "tomato:200g" 
       ] 
     }, 
     { 
      "ingredients" : [ 
       "ham:100g", 
       "pineapple:200g" 
       ] 
     } 
    ] 
} 
+4

Nie jestem pewien, czy poleganie na zamawianiu w tablicach jest najlepszym sposobem powiązania składników i ilości. – brianestey

+0

@brianestey To może nie być najlepsze rozwiązanie, ale OP chciał innego rozwiązania, które jest mniej szczegółowe.Pierwsze rozwiązanie używa "sera", "pomidora" itp. Jako nazwy, które naprawdę byłyby po stronie wartości. – fastcodejava

+0

Objaśnij, dlaczego "sery" i "pomidor" nie powinny być w tym przypadku kluczem? Najwyraźniej nie wystąpią dwa razy w tym samym przepisie i równie oczywiste będą zawsze ciągi. –

0

Mam nadzieję, że to uprości to za Ciebie! Json musi być napisany w taki sposób, aby jego minimalny i zrozumiały zarówno dla komputerów, jak i dla ludzi.

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