存储configuration数据(json)

tl; dr为什么将configuration数据存储在json文件中被认为是事实上的标准?

我最近阅读了维护Javascript书的一些部分,特别是存储configuration数据章节。

这是这一章的一句话:

configuration数据最好存储在一个单独的文件中,以便在它和应用程序逻辑之间创build一个干净的分隔。 一个好的起点是为configuration数据提供一个单独的JavaScript文件。 一旦configuration数据在一个单独的文件中,为pipe理这些数据开辟了更多的可能性。 一个有价值的select是将您的configuration数据转移到非JavaScript文件中。

即使您正在编写JavaScript应用程序,但JavaScript并不是存储configuration数据的好方法。 这是因为语法仍然是编程语言的语法,所以您需要确保没有引入语法错误。

他基本上说,将configuration数据存储在.json文件或.js文件中是一个不好的做法,应该避免。

来自json.org :

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。

互换意味着我发送和接收数据,以格式良好的方式传达两个进程。

很多人将数据存储在json文件中,这增加了很多噪音:花括号,缩进,双引号,逗号,不能写评论等等。

Java使用键值行,有没有更简单的方法来存储这些数据?

a 1 

用json格式(1):

 { "a": 1 } 

用js格式(2):

 module.exports = { a: 1 } 

微软喜欢使用添加部分到这些键值行的.ini文件。

Unixconfiguration文件也使用键值行。

那么,如果所有的世界都使用键值行,因为它们很容易被人类读/写,为什么json文件在node.js世界中成为事实上的标准呢? 请不要告诉我这是因为json和javascript实际上是同义词,因为开发者太懒,更喜欢调用require("./config.json")

在上面的例子中,第一个选项(1)诞生了,以减轻数据的互换性。 第二,艾米,这是不好的 。 这与将configuration数据存储在Java类中相同。 如果我想从php读取这个文件,因为我有一个Apache服务器和nodejs实时的东西,我应该如何parsing该文件? 我需要一个JavaScriptparsing器。

这两个选项都不应该有语法错误,否则程序可能会崩溃。

PS – 恕我直言,你是正确的评论,这是可怕的工作与格式没有评论

PPS – 我是Javascript开发人员,在post上是Javascript标签 – 所以从这方面回答主观

为什么要在JSON中存储configuration数据?

这很简单。 在Javascript中。 因为JSON被格式化为JS中的Object ,所以对于服务器端对象,客户端对象和数据存储,可以使用相同的语法 。 当你想debugging的东西,你可以抓住整个JSON,并把它放入你的代码,如var obj = JSON ,它的工作原理。 你可以在http://www.json.org/ Crockford的网站上find更多信息。

为什么重要的“大量的噪音大括号,身份,双引号..”?

第一个原因当然是语法错误检测 。 如果你有强大的语法,而不是“纯粹的键/对值”,你可以检测到更快,更容易丢失分号或大括号。 另外什么是非常重要的 – parsing大文件更快

第二个原因是数组,对象,string和布尔值的语法不同。 你想要selectstring“真”,布尔真和数真-1,因为你想与许多数据库,存储,API,编程语言工作 – 你需要支持整个规模

标识和JSON关系不是问题。 JSON可以是一行。 在configuration文件中,这是相当不实际的(stackoverflow的用户可以parsing它; 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" } } ] 

..你想logging所有的电子邮件到控制台?
jsonobj.forEach(function(ele){ console.log(ele.email); });

你想要访问第一个用户的信用卡号码吗?
jsonobj[0].creditcard.number

..你想添加下一个用户? jsonobj.push({ email: "peter@dude.com:, isAdmin: false })

..你想parsing文件没有外部库? JSON.parse(jsonrawfile);

JSON与XML

非常类似的方法是有XML。 但是关于这个尝试谷歌一些差异。 我认为前端开发者和粉丝IE6一样是粉丝们的XML。 有更多的原因为什么这样。 尝试谷歌。

希望它相当有帮助。