JSON有查询语言吗?
JSON有查询语言吗?
是否有一种类似于 SQL 或 XQuery 的语言来查询 JSON 数据?
我思考的是非常小的数据集,它们与 JSON 映射得很好,可以很容易地回答查询,例如“所有值为 X 的 Y > 3”或执行通常的 SUM / COUNT 类型操作。
完全是虚构的例子,像这样:
[{"x": 2, "y": 0}}, {"x": 3, "y": 1}, {"x": 4, "y": 1}] SUM(X) WHERE Y > 0 (would equate to 7) LIST(X) WHERE Y > 0 (would equate to [3,4])
我认为这将在客户端和服务器端上工作,并将结果转换为适当的语言特定数据结构(或保持为 JSON)
快速搜索表明人们已经考虑并实现了一些东西(JAQL),但似乎还没有出现标准的用法或一组库。尽管每个函数的实现都相当简单,但如果有人已经做对了,我就不想重新发明轮子。
有什么建议吗?
编辑:这可能确实是一个坏主意,或者 JSON 可能是我所考虑的太通用了。希望建立查询语言而不是直接执行求和等函数的原因是我希望基于用户输入动态构建查询。有点像“我们不需要 SQL,我们可以直接编写所需的函数”的论点。最终,这要么失控,要么你会越来越推动自己的 SQL 版本。 (好吧,我知道这听起来有点荒谬,但你懂我的意思..)
我推荐我正在开发的项目叫做jLinq。我想要一些反馈意见,所以我很乐意听听你的想法。
它允许你编写类似于LINQ的查询...
var results = jLinq.from(records.users) //you can join records .join(records.locations, "location", "locationId", "id") //write queries on the data .startsWith("firstname", "j") .or("k") //automatically remembers field and command names //even query joined items .equals("location.state", "TX") //and even do custom selections .select(function(rec) { return { fullname : rec.firstname + " " + rec.lastname, city : rec.location.city, ageInTenYears : (rec.age + 10) }; });
它是完全可扩展的!
文档仍在编写中,但你仍然可以在线尝试它。
编辑于2022年9月:
JMESPath似乎是使用最广泛、增长最快,且评论最好的可替代选项。它具有许多功能,包括“where”风格的过滤器。
原始内容:
当然,如何考虑:
它们似乎都在进行一些程度的工作,但是它们都与XPath和XQuery在概念上相似;尽管XML和JSON在概念模型(层次结构vs对象/结构)上有所不同。
编辑于2015年9月:
实际上,现在有JSON Pointer标准,允许非常简单和高效地遍历JSON内容。它不仅形式上得到了规定,而且也被许多JSON库支持。因此,我认为它是一个实际有效的标准,尽管由于其限制表达的能力可能或可能不被视为查询语言。