tl; dr 为什么在json文件中存储配置数据被认为是事实上的标准?
我最近阅读了Maintainable Javascript一书的部分内容,特别是存储配置数据一章。
这是本章的引用:
配置数据最好存储在单独的文件中,以创建清晰的分隔 它和应用程序逻辑。一个很好的起点是拥有一个单独的JavaScript文件 配置数据。一旦配置数据在一个单独的文件中,它就会打开更多 管理这些数据的可能性。一个值得的选择是移动您的配置 将数据转换为非JavaScript文件。
即使您正在编写JavaScript应用程序,JavaScript也不是一种很好的存储方式 配置数据。那是因为语法仍然是编程语言的语法, 所以你需要确保没有引入语法错误。
他基本上说将配置数据存储在.json文件或.js文件中是一种不好的做法,应该避免使用。
来自json.org:
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。
交换意味着我发送和接收数据,以格式良好的方式传达两个进程。
很多人将数据存储在json文件中,这会增加很多噪音:花括号,缩进,双引号,逗号,无法写注释等。
Java使用键值行,是否有更简单的方法来存储这些数据?
a 1
使用json格式(1):
{
"a": 1
}
使用js format(2):
module.exports = {
a: 1
}
Microsoft喜欢使用.ini文件向这些键值行添加部分。
Unix配置文件也使用键值行。
然后,如果全世界都使用键值行,因为它们很容易被人类读/写,为什么json文件在node.js世界中是事实上的标准?请不要告诉我,因为json和javascript实际上是同义词,因为开发人员太懒了,而且更喜欢拨打require("./config.json")
。
在上面的例子中,第一个选项(1)的诞生是为了简化数据的可互换性。第二,imo,它只是糟糕。这与在Java类中存储配置数据相同。如果我想从php读取这个文件,因为我有一个apache服务器和nodejs用于实时的东西,我应该如何解析该文件?我需要一个javascript解析器。
两个选项都不应该有语法错误,否则程序可能会崩溃。
答案 0 :(得分:3)
PS - 恕我直言,你对评论是正确的,使用没有评论的格式很糟糕
PPS - 我是Javascript开发者,帖子是Javascript标签 - 所以从这一侧主观回答
为什么要将配置数据存储在JSON中?
这很简单。 在Javascript中。因为JSON在JS中被格式化为Object
,所以您可以为服务器端对象,客户端对象和数据提供相同的语法商店。当您想要调试某些东西时,您可以抓住整个JSON并将其放入您的代码var obj = JSON
中并且它可以正常工作。您可以在http://www.json.org/ Crockford的网站上找到更多信息。
为什么重要的是“大括号,身份,双引号等很多噪音......”
第一个原因当然是语法错误检测。如果你有强大的语法而不是“纯键/对值”,你可以检测到更快,更容易丢失的分号或大括号。还有一点非常重要 - 解析大文件更快。
第二个原因是数组,对象,字符串和布尔值的语法不同。您希望选择字符串“true”,布尔值true和数字true - 1,因为您需要使用许多数据库,存储,API,编程语言 - 您需要支持整个比例。< / p>
标识和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"
}
}
]
..您要将所有电子邮件记录到控制台吗?
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。它有更多的原因。 试试google。
希望它有所帮助。