Gab*_*mas 6 javascript node.js
tl; dr为什么在json文件中存储配置数据被认为是事实上的标准?
我最近阅读了可维护的Javascript书的一些部分,特别是存储配置数据章节.
这是本章的引用:
配置数据最好存储在单独的文件中,以便在它与应用程序逻辑之间创建一个干净的分离.一个很好的起点是为配置数据提供单独的JavaScript文件.一旦配置数据位于单独的文件中,它就为管理该数据提供了更多可能性.一个有价值的选择是将配置数据移动到非JavaScript文件中.
即使您正在编写JavaScript应用程序,JavaScript也不是存储配置数据的好方法.那是因为语法仍然是编程语言的语法,因此您需要确保没有引入语法错误.
他基本上说将配置数据存储在.json文件或.js文件中是一种不好的做法,应该避免.
来自json.org:
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.
交换意味着我发送和接收数据,以格式良好的方式传达两个进程.
很多人将数据存储在json文件中,这会增加很多噪音:花括号,缩进,双引号,逗号,无法写注释等.
Java使用键值行,是否有更简单的方法来存储这些数据?
a 1
Run Code Online (Sandbox Code Playgroud)
并使用json格式(1):
{
"a": 1
}
Run Code Online (Sandbox Code Playgroud)
并使用js格式(2):
module.exports = {
a: 1
}
Run Code Online (Sandbox Code Playgroud)
Microsoft喜欢使用.ini文件,这些文件会向这些键值行添加部分.
Unix配置文件也使用键值行.
然后,如果全世界都使用键值行,因为它们很容易被人类读/写,为什么json文件在node.js世界中是事实上的标准呢?请不要告诉我,因为json和javascript实际上是同义词,因为开发人员太懒了,而且更喜欢打电话require("./config.json").
在上面的例子中,第一个选项(1)的诞生是为了简化数据的可互换性.第二,imo,这很糟糕.这与在Java类中存储配置数据相同.如果我想从php读取这个文件,因为我有一个apache服务器和nodejs用于实时的东西,我应该如何解析该文件?我需要一个javascript解析器.
两个选项都不应该有语法错误,否则程序可能会崩溃.
PS - 恕我直言,你对评论的看法是对的,使用没有评论的格式是很糟糕的
PPS - 我是 Javascript 开发人员,帖子上是 Javascript 标签 - 所以从这边主观地回答
为什么将配置数据存储在 JSON 中?
这很简单。在 JavaScript 中。由于 JSON 的格式与 JS 中的格式相同,因此服务器端对象、客户端对象和数据存储Object可以使用相同的语法。当你想要调试某些东西时,你可以抓取整个 JSON 并将其放入你的代码中var obj = JSON,然后它就可以工作了。您可以在http://www.json.org/ Crockford 的网站上找到更多信息。
为什么“很多噪音如大括号、标识、双引号......”很重要?
第一个原因当然是语法错误检测。如果您使用强大的语法而不是“纯键/对值”,您可以更快地检测到并且很容易丢失分号或大括号。还有一点非常重要——大文件的解析速度更快。
第二个原因是数组、对象、字符串和布尔值的语法不同。您希望有字符串“true”、布尔值 true 和数字 true - 1 的选项,因为您希望使用许多数据库、存储、API、编程语言 - 您需要支持整个规模。
标识和 JSON 关系不是问题。JSON 可以是单行的。在配置文件中这是非常不切实际的(stackoverflow的用户可以解析它;DDD,但“正常人”则不能)。
第三个原因是亲子关系。让我们看一个示例:
[
{
"email": "samuel@dude.com",
"isAdmin" : true,
"password": "KMLA#SLDOPW#",
"modules" : [ "html", "js", "css" ],
"creditcard" : {
"number" : 3288942398329832,
"expiration" : "2011-07-14T19:43:37+0100"
}
},
{
"email": "bill@dude.com",
"isAdmin" : true,
"password": "KMLA#SLDOPW#",
"modules" : [ "js", "nodejs" ],
"creditcard" : {
"number" : 20432943092423,
"expiration" : "2011-07-14T19:43:37+0100"
}
},
{
"email": "thomas@dude.com",
"isAdmin" : false,
"password": "KMLA#SLDOPW#",
"modules" : [ "ruby", "python", "css" ],
"creditcard" : {
"number" : 4239093223423,
"expiration" : "2011-07-14T19:43:37+0100"
}
}
]
Run Code Online (Sandbox Code Playgroud)
..您想将所有电子邮件记录到控制台吗?
jsonobj.forEach(function(ele){ console.log(ele.email); });
..您想访问第一个用户的信用卡号吗?
jsonobj[0].creditcard.number
..您想添加下一个用户吗?
jsonobj.push({ email: "peter@dude.com:, isAdmin: false })
..您想在没有外部库的情况下解析文件吗?
JSON.parse(jsonrawfile);
JSON 与 XML
非常相似的方法是使用 XML。但关于这个尝试谷歌一些差异。我认为前端开发人员就像粉丝 IE6 一样粉丝 XML。之所以会这样,还有更多原因。尝试谷歌一下。
希望它很有帮助。
| 归档时间: |
|
| 查看次数: |
2993 次 |
| 最近记录: |