我喜欢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/