【问题标题】:Correct use of JSON for a simple restaurant menu description正确使用 JSON 进行简单的餐厅菜单描述
【发布时间】:2011-11-29 16:27:54
【问题描述】:

我想知道我制作的这个 JSON 脚本示例是否格式正确,这样放置信息是否有意义。

{"menu": {
  "drinks": [
    {"coke": "20"},
    {"pepsi": "20"},
    {"water": "20"}
  ],
  "junk-food": [
    {"hamburger": "40"},
    {"fries": "20"},
    {"pizza": "20"}
  ]
}}

我已经用http://jsonlint.com/ 验证了脚本,但我还是想多做一点,因为我是新手。

关于使用脚本的一些上下文,我将使用 Python 解析脚本。

它旨在组织 GUI 的元素,看起来或多或少像这样:

在第二个窗口中,将出现一个类似于第一个窗口的列表框,其中包含相应的项目和相应的价格。

  • JSON 是否正确?
  • 这种结构有意义吗?

【问题讨论】:

  • 我会将所有项目放在同一个数组中,并带有一个“类别”属性——或者更好的是,一个类别属性数组。这样fries 可以是junk-food 也可以是side-dishappetizer
  • 如何为对象建模?先这样做。
  • @DerekBeattie 我不确定该怎么做,这几乎是我第一次使用 JSON。不过我会试试的。谢谢!
  • @evan 我不完全理解您的建议。如果我将每个项目都放在一个数组中,我将如何识别该项目是哪个类别?
  • 我也会给每件商品一个 ID,让价格更清楚。喜欢"coke": {id: 1, price: 20}。另请注意,我删除了"",因为它是一个数字,并且在没有"" 的情况下会更好地使用语义。

标签: javascript json validation encoding


【解决方案1】:

JSON 是正确的。该结构虽然没有太多的语义意义。我更改了结构,使其具有更多意义,并且在添加属性时更易于管理。

{"menu": {
    "items": [
        {
            "name":"coke",
            "qty": 20,
            "category":"drinks",
            "sizes":["small","large"]
        },
        {
            "name":"pepsi",
            "qty": 20,
            "category":"drinks",
            "sizes":["small","large"]
        },
        {
            "name":"water",
            "qty": 20,
            "category":"drinks",
            "sizes":["small","large"]
        },
        {
            "name":"hamburger",
            "qty": 40,
            "category":"junk food",
            "sizes":["small","large"]
        },
        {
            "name":"fries",
            "qty": 20,
            "category":"junk food",
            "sizes":["small","large"]
        },
        {
            "name":"pizza",
            "qty": 20,
            "category":"junk food",
            "sizes":["small","large"]
        }
    ]
}}

为了节省空间,你也可以这样做,

{"menu": {
    "items": [
        {
            "name":"coke",
            "qty": 20,
            "category":0,
            "sizes":["small","large"]
        },
        {
            "name":"pepsi",
            "qty": 20,
            "category":0,
            "sizes":["small","large"]
        },
        {
            "name":"water",
            "qty": 20,
            "category":0,
            "sizes":["small","large"]
        },
        {
            "name":"hamburger",
            "qty": 40,
            "category":1,
            "sizes":["small","large"]
        },
        {
            "name":"fries",
            "qty": 20,
            "category":1,
            "sizes":["small","large"]
        },
        {
            "name":"pizza",
            "qty": 20,
            "category":1,
            "sizes":["small","large"]
        }
    ],
    "categories":[
        "drinks",
        "junk food"
    ]
}}

【讨论】:

  • 嗯,很有趣,它肯定更好看!顺便说一句,这个数字是奖品而不是数量,并不是说它有很大的不同。 +1!
  • 感谢编辑,我真的不需要节省太多空间,因为这些信息不会被传输,它只会在应用程序启动时被python读取一次,所以没有那里非常需要优化。
  • 嗯,这取决于哪种信息更重要。如果优先级是查找某个类别中的所有项目,那么这种结构对于该任务来说会有些不利。
  • 还有一个问题。我看到了一个可能的问题,假设我有两个百事可乐,一个小的一个大的,你会如何建议我指出它们应该一起呈现?一个接一个?
  • @tereško 我同意。您需要传递数据以获取同一类别中的所有项目。我这样做的原因是因为我尽量避免使用数据作为密钥。这样,您就不太可能遍历 json 响应并尝试访问服务器未返回的属性。钥匙也不能有空格。这就是为什么垃圾食品是垃圾食品。
猜你喜欢
  • 2016-08-04
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
相关资源
最近更新 更多