2013-07-28 56 views
12

Tôi có cấu trúc JSON sau đây nhưng tôi tự hỏi liệu có cách nào để đơn giản hóa nó hơn nữa không. 'Thành phần' và 'số lượng' có thể được loại bỏ khỏi tất cả các mục bằng cách nào đó để giúp giảm bớt nó?Đơn giản hóa cấu trúc 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

Bạn không nên lo lắng về việc giảm trừ khi dữ liệu không được chuyển đủ nhanh, ngay bây giờ bạn nên lo lắng hơn là cấu trúc dữ liệu hiển thị mục đích đúng – aaronman

Trả lời

14

Có, bạn có thể đơn giản hóa mà khá một chút:

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

Giải thích:

  • Các cấp cao nhất của ví dụ của bạn là một đối tượng duy nhất mục: {"recipes": <...>}. Trừ khi điều này là một phiên bản đơn giản của một đối tượng mà thực sự sẽ có các mục khác trong nó, đó là dư thừa. Mã của bạn biết những gì nó gửi/nhận, vì vậy không có thêm thông tin ở đó.

  • Giá trị của đối tượng {"recipes": <...>} là một mảng đối tượng hai mục, với các phím "name""ingredients". Bất cứ khi nào bạn có một mảng như thế này, nó có ý nghĩa hơn (và nhỏ gọn hơn) để thay thế nó bằng một đối tượng. Như một quy tắc của ngón tay cái:

    Nếu các phím trong một mảng của các đối tượng có thể được thay thế bằng "key""value" và vẫn có ý nghĩa, thay thế mảng với một đối tượng duy nhất .

  • Quy tắc tương tự áp dụng cho mảng [{"ingredient": <...>, "quantity": <...>}, ...] của bạn: mỗi đối tượng có thể được thay thế bằng cặp khóa-giá trị và tiếp tục có ý nghĩa.

Kết quả cuối cùng cho thấy thông tin này dài 87 ký tự (với khoảng trống ngoài không gian), so với 249 ký tự ban đầu - giảm 65%.

+0

Hơi bối rối về downvote ... nếu có một vấn đề với đại diện này, tôi không thấy nó. –

+0

Không bỏ phiếu nhưng tôi sẽ nói đó là vì bạn đã loại bỏ phần "công thức nấu ăn" – aaronman

+0

@aaronman Hmm, có thể. Trong ví dụ của OP nó hoàn toàn dư thừa, mặc dù. –

3

Chắc chắn. Một cách sẽ là:

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

Hoặc

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

Kể từ khi họ là tất cả pizza bạn có thể xóa tên.

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

Tôi không chắc chắn dựa vào thứ tự trong mảng là cách tốt nhất để kết hợp các thành phần và số lượng. – brianestey

+0

@brianestey Nó có thể không phải là giải pháp tốt nhất nhưng OP muốn có một giải pháp khác ít chi tiết hơn.Các giải pháp đầu tiên sử dụng "pho mát", "cà chua" vv như tên mà thực sự sẽ được ở bên giá trị. – fastcodejava

+0

Chăm sóc để giải thích tại sao "pho mát" 'và' "cà chua" "không phải là chìa khóa trong trường hợp này? Họ rõ ràng sẽ không xảy ra hai lần trong cùng một công thức, và bằng nhau rõ ràng là luôn luôn có dây. –

0

Hy vọng điều này sẽ đơn giản hóa nó cho bạn! Json phải được viết theo cách sao cho tối thiểu và dễ hiểu cho cả máy tính và con người.

var cooking = { 
      "recipes" : 
      [   
      { 
       "name":"pizza", 
       "cheese": "100g" 
       "tomato": "200g" 
      }   
      , 
      { 
       "name":"pizza 2", 
       "ham": "300g" 
       "pineapple": "300g" 
      } 
      ] 
      } 
    }; 
Các vấn đề liên quan