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": <...>}を持つ 2 項目オブジェクトの配列です。このような配列がある場合はいつでも、それをオブジェクトに置き換える方が理にかなっています (そしてよりコンパクトです)。経験則として:"name""ingredients"

    オブジェクトの配列のキーを置き換えることができ"key""value"それでも意味がある場合は、配列を単一の{"key_name": <value>, ...}オブジェクトに置き換えます。

  • 配列にも同じ規則が適用されます[{"ingredient": <...>, "quantity": <...>}, ...]。各オブジェクトはキーと値のペアに置き換えられ、意味を持ち続けることができます。

最終的に、この情報の表現の長さは 87 文字 (不要な空白を削除) になり、元の 249 文字と比較して 65% 削減されます。

于 2013-07-28T22:23:07.007 に答える
2

絶対。1つの方法は次のとおりです。

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 に答える