JSON导入/导出格式的文件扩展名

时间:2014-09-14 19:31:56

标签: javascript json mongodb file-extension

包含JSON数据的文件的官方文件扩展名为.json。但是在使用MongoDB一段时间之后,我意识到这个扩展实际上用于两种类型的JSON格式:

  1. 包含一个JSON文档的文件,其中包含可选的漂亮打印,包括换行符。
  2. 包含多行缩小JSON文档的文件。这里的每一行都是JSON,但整个文件本身并不是有效的JSON。
  3. 例如,mongoexport手册在其许多示例中使用output.json来创建包含多行JSON的文件。但是,采用第一种格式的解析器可能会阻塞此文件。

    是否有任何传统的备用文件扩展名来区分这两种情况?

2 个答案:

答案 0 :(得分:1)

我同意多个JSON对象显然没有有效的JSON。该规范指出JSON-text = ws value wsvalue = false / null / true / object / array / number / string,这意味着它不允许多个对象。

我们努力将这种格式称为NDJSON。该规范的当前第一个版本在此处:https://github.com/ndjson/ndjson-spec

我们仍然需要对此标准进行更多宣传,因为ndjson经常被错误地标记为.json

答案 1 :(得分:0)

不是我知道的,并且有充分的理由。

JSON被认为是一种低开销的数据交换格式。除非引用,否则空格会被我所知道的任何解析器(Java,Perl,Python,JavaScript)忽略。

虽然在RFC7159: The JavaScript Object Notation (JSON) Data Interchange Format中明确提到了空格,但语法并未声明空格具有语义含义。它在语法部分中的状态是白色空间是无关紧要的,并且在解析器部分中,所有符合标准的解析器都必须遵守语法。因此,无论是否存在空格,只要满足JSON语法的其他要求,它就是有效的JSON文档。

这导致基本上每个解析器在开始创建对象之前首先删除任何未引用的空格,或者首先忽略它。

因此,如果解析器在解析您提到的格式时遇到问题,则可以安全地将其视为错误。

编辑:我没有看到假设一个文档中的多个对象形成无效的JSON文档。据我所知,RFC隐式允许它拥有多个对象,因为它不会对令牌数量施加限制,也不会明确禁止JSON文本包含多个对象。但是,这意味着任何解析JSON的应用程序都应该获得一个未定义数量的对象而不是一个。