【问题标题】:structured query language for JSON (in Python)JSON的结构化查询语言(Python)
【发布时间】:2013-03-09 02:21:23
【问题描述】:

我正在开发一个输出 JSON 文件的系统,我使用 Python 解析数据并将其显示在 UI (PySide) 中。我现在想为该系统添加过滤,我认为与其编写查询系统,不如为 JSON(在 Python 中)提供一个查询系统,这将为我节省大量的开发时间。我找到了这个线程:

Is there a query language for JSON?

但这对于基于 Web 的系统来说更是如此。关于 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”可以是同一事物的嵌套数组(其他操作)。该系统将被构建为允许用户将自己的标签也添加到数据中。我希望有一个查询系统,允许用户定义他们自己的“过滤器”,因此是关于查询语言的问题。如果有什么东西可以让我做类似 "SELECT * WHERE "type" == "callback" 并获得必要的操作,那就太好了。

Pync 的建议很有意思,我去看看。

【问题讨论】:

  • 这似乎是一个相当开放的问题,可能需要更多的研究才能适合这里。
  • 您能否举一个您正在使用的 json 示例以及预期的查询?

标签: python sql json


【解决方案1】:

我对此进行了一些思考,我倾向于一些不太具体的东西,例如“JSON 查询语言”,并考虑了更通用的东西。我记得在使用 C# 时,他们有一个叫做 LINQ 的通用查询系统来处理这类查询问题。

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

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

它甚至似乎有一些基本的aggregation functions。虽然不是特定于 JSON,但我认为它至少是一个很好的查询起点。

【讨论】:

    【解决方案2】:

    我注意到几年前有人问过这个问题,但如果其他人发现了这个问题,这里有一些新的项目试图解决同样的问题:

    我个人选择pyjq,因为我一直使用jq 进行数据探索,但ObjectPath 似乎非常有吸引力,并且不仅限于json。

    【讨论】:

      【解决方案3】:

      您还可以查看 PythonQL,这是一种处理 SQL 和 JSON 查询的 Python 查询语言扩展:pythonql

      【讨论】: