与将数据存储在JavaScript对象中相比,将数据存储为JSON的好处

时间:2019-01-13 01:24:40

标签: javascript json

我想知道将数据存储为JSON与仅将其存储为JavaScript对象相比有什么优势。例如,如果我有一个带有以下JSON的文件:

{
    "pizza": [
        {
            "name": "Margherita",
            "price": 65,
            "ingredients": [
                "tomatsås",
                "mozzarella",
                "basilika"
            ]
        },
        {
            "name": "Pizza ai quattro formaggi",
            "price": 70,
            "ingredients": [
                "tomatsås",
                "mozzarella",
                "gorgonzola",
                "parmesan",
                "fontina"
            ]
        }
    ]
}

为什么我不能像这样将其编写为JavaScript对象:

menu = {
    pizza: [
        {
            name: "Margherita",
            price: 65,
            ingredients: [
                "tomatsås",
                "mozzarella",
                "basilika"
            ]
        },
        {
            name: "Pizza ai quattro formaggi",
            price: 70,
            ingredients: [
                "tomatsås",
                "mozzarella",
                "gorgonzola",
                "parmesan",
                "fontina"
            ]
        }
    ]
}

那样我就不必解析它,如果文件存储在本地,访问起来会更容易,而且由于密钥不需要用引号引起来,因此它甚至更短一些。

但是,由于这是我第一次使用JSON,所以我可能会遗漏一些东西,那么在JavaScript对象上使用JSON有什么好处?

1 个答案:

答案 0 :(得分:1)

它们是完成不同任务的工具。 JSON是数据序列化格式。 JavaScript(您的标准内联对象必须包含在其中)用于编写脚本。

这对您如何使用它们有影响。例如,您不能(轻松)拥有使用内联对象创建JavaScript的脚本。假设您想使用脚本将这些数据写为JSON。就像writeFile('file', JSON.stringify(data))一样简单。没有使用JavaScript创建JavaScript的内置库,因此您不能直接使用对象编写JavaScript脚本。充其量,您可以将静态脚本(在您的情况下为const menu =)连接到JSON编码的数据。

还有潜在安全隐患。 JSON blob中存储的任何内容都不会执行。但是,如果在使用任意数据构建此脚本时出错,则有可能执行某些操作,因为必须执行该脚本才能进行评估。

不使用加载程序,您的脚本只能在特定的上下文中运行。也就是说,如果它的顶部有const menu =,则将声明menu,并且如果没有一些解决方法就无法重命名/重用{{1}}。通过加载JSON,您可以在任何需要的上下文中解析并根据需要使用它,而不必担心副作用。

  

那样我就不必解析

JavaScript编译器执行。

  

如果文件存储在本地,则访问更容易

我假设您是指直接在磁盘上加载文件。建议您运行小型的基本Web服务器。

  

,它甚至更短一些,因为键不需要用引号引起来

无论哪种方式,这都不是一个成功的论点。差别很小。

我怀疑JSON解析器也会处理得更快,因为它处理起来少了。

相关问题