当前位置:  开发笔记 > 前端 > 正文

是否有JSON的查询语言?

如何解决《是否有JSON的查询语言?》经验,为你挑选了9个好方法。

是否有(大致)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版本.(好吧,我知道这是一个有点愚蠢的论点,但你明白了......)



1> StaxMan..:

当然,怎么样:

JAQL

JsonPath.

Json查询

它们似乎都在进行中,但在某种程度上起作用.它们在概念上也类似于XPath和XQuery; 即使XML和JSON具有不同的概念模型(层次结构与对象/结构).

编辑 2015年9月:实际上现在有JSON指针标准允许非常简单有效地遍历JSON内容.它不仅是正式指定的,而且还受到许多JSON库的支持.因此,我将其称为实际真正有用的标准,尽管由于其表达能力有限,它可能会或可能不会被视为查询语言本身.


换句话说,没什么标准和稳定...... :-(

2> Hugoware..:

我推荐我正在研究的项目叫做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)
        };
    });

它也是完全可扩展的!

文档仍在进行中,但您仍可以在线试用.


8年前的最新更新,并且5年前没有被问及该项目是否已终止的回应...我认为该项目已终止。

3> Jonathan..:

更新:XQuery 3.1可以查询XML或JSON - 或两者一起查询.和XPath的3.1也可以.

名单正在增长:

JSONiq(基于XQuery)

UNQL(像SQL)

JaQL(功能)

JsonPath(类XPath)

Json Query(类似于XPath)

GraphQL(基于模板,键入)



4> xor..:

jmespath的工作非常简单,很好,http: //jmespath.org/ 亚马逊在AWS命令行界面中使用它,所以它必须非常稳定.


但同时在同一页面上:"如果你需要更多高级功能--query,你可以查看jq,命令行JSON处理器." 因此,似乎AWS使用`jmespath`作为`--query`参数,但建议`jq`用于命令行管道.http://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html

5> Roger..:

内置array.filter()方法使大多数这些所谓的javascript查询库过时

您可以在代理中放置尽可能多的条件:简单比较,startsWith等.我没有测试过,但您也可以嵌套过滤器来查询内部集合.


`array.filter()`是JavaScript的一部分,而不是JSON.
JSON是JavaScript的一个子集,但是有很多语言支持JSON和数组,并且实现了数组过滤方法,因此这是一个有效的观点.

6> Ela Bednarek..:

ObjectPath是复杂或未知结构的JSON文件简单ligthweigth查询语言.它与XPath或JSONPath类似,但由于嵌入式算术计算,比较机制和内置函数,功能更强大.

例

Python版本已经成熟并用于生产.JS仍处于测试阶段.

可能在不久的将来,我们将提供一个完整的Javascript版本.我们还希望进一步开发它,以便它可以作为Mongo查询的简单替代方案.



7> peak..:

jq是一种J SON q uery语言,主要用于命令行,但绑定到各种编程语言(Java,node.js,php,...),甚至可以通过jq-web在浏览器中使用.

以下是基于原始问题的一些插图,以此JSON为例:

 [{"x": 2, "y": 0}}, {"x": 3, "y": 1}, {"x": 4, "y": 1}]

SUM(X)WHERE Y> 0(等于7)

map(select(.y > 0)) | add

列表(X)Y> 0(等于[3,4])

map(.y > 0)



8> James Newton..:

如果您使用的是.NET,则Json.NET支持JSON顶部的LINQ查询.这篇文章有一些例子.它支持过滤,映射,分组等.



9> Alexx Roche..:

另一种看待这种情况的方法是使用mongoDB您可以将您的JSON存储在mongo中,然后通过mongodb查询语法进行查询.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有