我喜欢json作为我编写的软件的配置文件格式。我喜欢它轻巧,简单并且得到广泛支持。但是,我发现json中确实有一些我没有的东西。

Json没有多行字符串或此处的文档(http://en.wikipedia.org/wiki/Here_document),当您希望json文件具有人类可读性和可编辑性时,这通常很尴尬。您可以使用字符串数组,但这是一种繁杂的解决方法。

Json不允许评论。

如果您查看Unix配置文件的格式,就会发现很多人在设计自己的尴尬格式,而使用某种通用用途的东西确实更有意义。例如,以下是Apache配置文件中的一些代码:

RewriteEngine on
RewriteBase /temp
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml\s*;\s*q=0
RewriteCond %{REQUEST_URI} \.html
RewriteCond %{THE_REQUEST} HTTP/1\.1
RewriteRule t\.html t.xhtml [T=application/xhtml+xml]

本质上,这里发生的是他们发明了一种非常痛苦的方式来编写 bool 函数f(w,x,y,z)= w&!x&y&z。您想要逻辑上的“或”吗?他们也有一些单独的(丑陋的)机制。

这似乎指向的是一种简单且图灵不完整的数据描述语言,但比json更具表达性,灵活性和便利性。有人知道这种语言吗?

以我的喜好,XML太复杂了,而Lisp表达式具有错误的功能(图灵完备性)而缺乏正确的功能(此处为文档,表示式语法)。

[编辑]标题具有误导性。我实际上对json的下一次迭代不感兴趣。我对javascript的一部分语言不感兴趣。我对替代数据描述语言感兴趣。

最佳答案

EDN format是基于Clojure文字的一个选项。它几乎是JSON的超集,除了没有特殊符号可分隔映射中的键和值(如:在JSON中所做的一样)之外;相反,所有元素都由空格和/或逗号分隔,并且 map 被编码为带有偶数个元素的列表,并用{..}括起来。

EDN允许注释(使用;到换行符,或使用#_到下一个元素的末尾),但不允许此处文档。它可以使用标记符号扩展为新类型:

#myapp/Person {:first "Fred" :last "Mertz"}
myapp/Person标记的参数(即{:first "Fred" :last "Mertz"})必须是有效的EDN表达式,这使其无法扩展到here-doc支持。

它具有两个内置标签:时间戳的#inst#uuid。它还支持命名空间符号(即标识符)和关键字(即 map 键consts)类型;它区分列表(..)和向量[..]。任何类型的元素都可以用作 map 中的键。

在您遇到上述问题的情况下,可以发明一种#apache/rule-or标记,该标记接受一系列元素,我的语义由您自己决定!

关于JSON替代品(出于指定配置的目的)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8813727/

10-12 12:39
查看更多