【问题标题】:Most diffable data interchange format?最易区分的数据交换格式?
【发布时间】:2017-07-15 20:02:28
【问题描述】:

JSON 很棒,因为它得到了广泛的支持,而且机器和人类都可以轻松读写。

YAML 很棒,因为它更易于人类读写,并且支持更多数据类型。

TOML 就像是 INI 的改进版。

我想针对不同的东西进行优化:可区分性。即,通过标准的diff 工具运行时,了解同一文档的两个版本之间的变化有多容易?

据我所知,Yarn 甚至为他们的锁定文件创建了自己的custom format 只是为了改进这方面。

是否有任何开源 JS 库可用于从对象生成可区分的输出?

【问题讨论】:

  • 您要的是数据格式、差异库还是两者兼而有之?我还认为答案完全取决于要区分的信息的性质和目的。
  • @ÁlvaroGonzález 数据/文件格式。数据的性质未知。我想区分任何可能从 HTTP REST API 返回的内容。我会将它从 JSON 或任何它的格式转换为这种新的数据交换格式,然后对其进行比较。我们的想法是能够看到它随着时间的推移如何变化。
  • 我看到人们使用 Git 跟踪德国法律的变化,markdown 是首选格式,因为它们基本上是非常大的纯文本块。但是跟踪例如产品目录的演变是一个非常不同的用例,可能需要不同的格式。我就是这个意思。
  • @ÁlvaroGonzález 很公平,但我说的是“数据交换格式”而不是人类语言。假设我的数据有一些结构:-)
  • 我一直这么认为。但是大多数差异算法都是基于行的,并且具有例如具有程序设置的 JSON 文件比具有 EULA 的 JSON 文件。

标签: javascript json yaml diff


【解决方案1】:

Canonicalized 然后美化 JSON

规范化规范化type serializationsorts the fields

美化添加了空白和行分隔符。

我们需要制定一个美化标准。

我希望看到与这种 diffability 等效的 YAML。 也许这就像从 YAML 转换为 JSONC 然后将规范化的 JSONC 转换回 YAML 一样简单。 JSONC 到 YAML 的转换过程也需要标准化。 JSONC 规范化器可能还不存在。 绝对没有这么简单。

注意:美化使其不再是规范的,但对于可区分性是必要的。

RFC 提供了一个sample ES6 JSON canonicalizer

以下开源实现已被验证与 JCS 兼容:

——Open Source Implementations

规范化

原始

  {
    "numbers": [333333333.33333329, 1E30, 4.50,
                2e-3, 0.000000000000000000000000001],
    "string": "\u20ac$\u000F\u000aA'\u0042\u0022\u005c\\\"\/",
    "literals": [null, true, false]
  }

删除空格并规范化序列化

{"numbers":[333333333.3333333,1e+30,4.5,0.002,1e-27],"string":"EURO$\u000f\nA'B\"\\\\\"/","literals":[null,true,false]}

排序

{"literals":[null,true,false],"numbers":[333333333.3333333,1e+30,4.5,0.002,1e-27],"string":"EURO$\u000f\nA'B\"\\\\\"/"}

美化

{
  "literals": [
    null,
    true,
    false
  ],
  "numbers": [
    333333333.3333333,
    1e+30,
    4.5,
    0.002,
    1e-27
  ],
  "string": "EURO$\u000f\nA'B\"\\\\\"/"
}

【讨论】:

猜你喜欢
  • 2016-06-20
  • 2012-05-28
  • 2015-01-12
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 2014-02-25
相关资源
最近更新 更多