【问题标题】:objectpath json query to get array values in pythonobjectpath json查询以在python中获取数组值
【发布时间】:2018-08-07 13:05:17
【问题描述】:

我有一些 JSON,如下所示:

{
"books": [
    {
        "name": "Matthew"
    },
    {
        "name": "Mark",
        "sections": [
            {
                "reference": "1:1-1:8",
                "tags": [
                    "a",
                    "b"
                ],
                "summary": "blah",
                "notes": ""
            },
            {
                "reference": "1:9-1:15",
                "tags": [
                    "b",
                    "c",
                    "d"
                ],
                "summary": "",
                "notes": ""
            }
        ]
    }
]

}

我想使用 objectpath 获取所有部分的列表。

我试过了:

sections = Tree(db).execute('$.books[@.name is "Mark"].sections')
for section in sections:
    print(section)
    print("----\n")

但是返回的是一个单独的部分,它是一个数组。也就是说,节只有一个结果,而我只期望(或至少想要)“节”数组。 这将节省我在 for 循环中的 for 循环。

是否有一些特殊的语法让它返回我想要的方式?

我也试过了:

'$.books[@.name is "Mark"].sections.*'
'$.books[@.name is "Mark"].sections[*]'

没有运气。

【问题讨论】:

  • pythonjson 库有什么问题? [book['sections'] for book in json.loads(json_obj)['books']]
  • 我正在使用 objectpath 来帮助将数据结构从代码中分离出来,因此希望在 objectcode 中只保留一些字符串,这使得更改数据布局变得非常容易。

标签: python json objectpath


【解决方案1】:

sections 是一个生成器对象。要从中获取第一项,您可以使用next() 函数:

sections = Tree(db).execute('$.books[@.name is "Mark"].sections')
print(sections) # will show that it's a generator
for section in next(sections):
    print(section)
    print("----\n")

第一项将是包含各个部分的列表。现在您可以使用 for 循环遍历每个部分。

【讨论】:

  • 这个例子帮助我完美地从嵌套的 json 中提取了一个值。谢谢
猜你喜欢
  • 2019-02-25
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 2022-10-23
  • 2019-01-20
相关资源
最近更新 更多