我想知道将数据存储为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有什么好处?
答案 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解析器也会处理得更快,因为它处理起来少了。