6

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

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

这是本章的引文:

配置数据最好存储在一个单独的文件中,以便在它和应用程序逻辑之间创建一个清晰的分离。一个好的起点是为配置数据创建一个单独的 JavaScript 文件。一旦配置数据位于单独的文件中,它就为管理该数据开辟了更多可能性。一个有价值的选择是将您的配置数据移动到非 JavaScript 文件中。

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

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

来自json.org

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

交换对我来说意味着发送和接收数据,以格式良好的方式通信两个进程。

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

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

a 1

并使用 json 格式(1):

{
  "a": 1
}

并用js格式(2):

module.exports = {
  a: 1
}

Microsoft 喜欢使用 .ini 文件来向这些键值行添加部分。

Unix 配置文件也使用键值行。

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

在上面的例子中,第一个选项 (1) 的诞生是为了简化数据的互换性。第二个,imo,这很糟糕。这与在 Java 类中存储配置数据相同。如果我想从 php 读取此文件,因为我有一个 apache 服务器和 nodejs 用于实时处理,我应该如何解析该文件?我需要一个javascript解析器。

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

4

1 回答 1

4

PS - 恕我直言,您对评论是正确的,使用没有评论的格式是很糟糕的

PPS - 我是 Javascript 开发人员,帖子是 Javascript 标签 - 所以从这方面主观回答

为什么将配置数据存储在 JSON 中?

这很简单。在 Javascript 中。由于 JSONObject在 JS 中被格式化为 an,因此您可以对服务器端对象、客户端对象和数据存储使用相同的语法。当您想调试某些东西时,您可以抓取整个 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"
        }
    }
]

..您想将所有电子邮件记录到控制台吗?
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。但是关于这个尝试谷歌一些差异。我认为前端开发人员就像是狂热的 XML 狂热的 IE6。之所以会这样,还有更多的原因。试试谷歌吧。

希望它很有帮助。

于 2014-01-17T10:37:34.940 回答