用于 JSON 的结构化查询语言(在 Python 中)

15 投票
4 回答
23847 浏览
提问于 2025-04-17 18:29

我正在开发一个系统,用来输出一个JSON文件,然后用Python解析这些数据并在用户界面(PySide)中显示出来。现在我想给这个系统添加过滤功能,我在想,如果能找到一个现成的JSON查询系统(在Python中),那就能省下很多开发时间。我发现了这个讨论:

有没有JSON的查询语言?

不过那个讨论主要是针对基于网页的系统。有没有类似的Python解决方案呢?

补充说明一下:

我生成的数据格式大概是这样的:

{
    "Operations": [
    {
        "OpID": "0", 
        "type": "callback", 
        "stringTag1": "foo1", 
        "stringTag2": "FooMsg", 
        "Children": [...],
        "value": "0.000694053"
   },
   {
        "OpID": "1", 
        "type": "callback", 
        "stringTag1": "moo1", 
        "string2": "MooMsg", 
        "Children": [...],
        "value": "0.000468427"
   }
}

其中“Children”可能是相同内容的嵌套数组(其他操作)。这个系统会允许用户为数据添加自己的标签。我希望能有一个查询系统,让用户也能定义自己的“过滤条件”,所以我才问关于查询语言的事。如果能有一个功能,让我可以像这样“选择所有类型为‘callback’的操作”,那就太好了。

有人提到Pync这个建议挺有意思的,我会去看看。

4 个回答

3

你还可以看看PythonQL,这是一种扩展了Python的查询语言,可以处理SQL和JSON查询。你可以在这里找到它:pythonql

14

我注意到这个问题几年前就有人问过,但如果还有其他人看到这个,这里有一些新的项目在尝试解决同样的问题:

我个人选择了 pyjq,因为我经常用 jq 来探索数据,但ObjectPath看起来也很不错,而且不限于处理json格式。

11

我想了想这个问题,我觉得可以用一个不那么具体的东西,比如“JSON查询语言”,而且我考虑了一些更通用的方案。我记得在用C#的时候,他们有一个比较通用的查询系统,叫做LINQ,用来处理这类查询问题。

看起来Python也有类似的东西,叫做Pynq,它支持一些基本的查询,比如:

filtered_collection = From(some_collection).where("item.property > 10").select_many()

它似乎还有一些基本的聚合函数。虽然它并不是专门针对JSON的,但我觉得这至少是一个不错的查询起点。

撰写回答