存储配置数据(json)

时间:2013-08-15 14:46:42

标签: javascript node.js

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解析器。

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

1 个答案:

答案 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。

希望它有所帮助。