JSON 之所以伟大,是因为它得到了广泛的支持,而且机器和人类都易于读写。
YAML 很棒,因为它更易于人类读写,并且支持更多数据类型。
TOML就像 INI 的改进版。
我想针对不同的东西进行优化:可微性。即,当运行标准 diff 时,了解同一文档的两个版本之间发生了什么变化有多容易?工具?
据我所知,Yarn竟然自己创造custom format他们的锁文件只是为了改善这方面。
是否有任何开源 JS 库可用于从对象生成可区分的输出?
最佳答案
Canonicalized然后美化JSON
规范化规范化了 type serialization和 sorts the fields .
美化后添加空格和行分隔符。
我们需要提出一个美化标准。
我希望看到这种可微性的 YAML 等价物。 也许这就像从 YAML 转换为 JSONC 然后将规范化的 JSONC 转换回 YAML 一样简单。 JSONC 到 YAML 的转换过程也需要标准化。 JSONC 规范器可能还不存在。 绝对不是这么简单。
注意:美化使它不再规范,但对于可微性是必要的。
RFC 提供了一个 sample ES6 JSON canonicalizer .
The following Open Source implementations have been verified to be compatible with JCS:
- JavaScript: https://www.npmjs.com/package/canonicalize
- Java: https://github.com/erdtman/java-json-canonicalization
- Go: https://github.com/cyberphone/json-canonicalization/tree/master/go
- .NET/C#: https://github.com/cyberphone/json-canonicalization/tree/master/dotnet
- Python: https://github.com/cyberphone/json-canonicalization/tree/master/python3
规范化
原始
{
"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\"\\\\\"/"
}
关于javascript - 最不同的数据交换格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42447949/