Python 使用jq正确解析数据

Python 使用jq正确解析数据,python,stream,jq,Python,Stream,Jq,我有以下数据: [ { "M": [ { "id": 1, "nk": "MATH$$SPRING$$INST1$$2", "section": { "nk": "MATH$$SPRING$$INST1", "course": 1, "

我有以下数据:

[
    {
        "M": [
            {
                "id": 1,
                "nk": "MATH$$SPRING$$INST1$$2",
                "section": {
                    "nk": "MATH$$SPRING$$INST1",
                    "course": 1,
                    "id": 1
                },
                "location": {
                    "id": 1,
                    "nk": "mcu$$101",
                    "campus": {
                        "id": 1,
                        "nk": "mcu",
                        "name": "Main Campus"
                    },
                    "address": "1 st",
                    "building": "1",
                    "room": "101"
                },
                "day_of_week": 2,
                "start_time": "09:00:00",
                "end_time": "10:00:00"
            },
            {
                "id": 3,
                "nk": "ENG$$SPRING$$INST2$$2",
                "section": {
                    "nk": "ENG$$SPRING$$INST2",
                    "course": 2,
                    "id": 4
                },
                "location": {
                    "id": 2,
                    "nk": "mcu$$201",
                    "campus": {
                        "id": 1,
                        "nk": "mcu",
                        "name": "Main Campus"
                    },
                    "address": "1 st",
                    "building": "1",
                    "room": "201"
                },
                "day_of_week": 2,
                "start_time": "09:00:00",
                "end_time": "10:00:00"
            },
            {
                "id": 4,
                "nk": "ENG$$SPRING$$INST2$$22",
                "section": {
                    "nk": "ENG$$SPRING$$INST2",
                    "course": 2,
                    "id": 4
                },
                "location": {
                    "id": 2,
                    "nk": "mcu$$201",
                    "campus": {
                        "id": 1,
                        "nk": "mcu",
                        "name": "Main Campus"
                    },
                    "address": "1 st",
                    "building": "1",
                    "room": "201"
                },
                "day_of_week": 2,
                "start_time": "10:00:00",
                "end_time": "11:00:00"
            }
        ]
    },
    {
        "W": [
            {
                "id": 2,
                "nk": "MATH$$SPRING$$INST1$$4",
                "section": {
                    "nk": "MATH$$SPRING$$INST2",
                    "course": 1,
                    "id": 2
                },
                "location": {
                    "id": 2,
                    "nk": "mcu$$201",
                    "campus": {
                        "id": 1,
                        "nk": "mcu",
                        "name": "Main Campus"
                    },
                    "address": "1 st",
                    "building": "1",
                    "room": "201"
                },
                "day_of_week": 4,
                "start_time": "08:00:00",
                "end_time": "10:00:00"
            }
        ]
    }
]
我正试图提取“W”的列表

当我这样做时:
jq('[[].W][]')。转换(数据)
我一个也没有得到,但是当我这样做时,
jq('[[].M][]')。转换(数据)
我得到了想要的结果。为什么我会这样

我正试图提取“W”的列表

好的,让我们先讨论jq,然后讨论python接口

jq
[]
生成顶级数组中的所有项,因此
[]|.W
将产生两项:

  • null
    (因为第一项没有.W),并且
  • 所需列表
要仅提取“W”的列表,可以使用以下任何过滤器, 根据您的具体要求:

.[] | select(has("W")) | .W

.[] | .W | select(.)

.[] | .W // empty

.[1].W
从jq进口jq 正如网站上的文档所述:

如果多个_输出为False(默认值),则使用第一个输出

例如:

print jq('1,2').transform(data)
jq('.[] | .W // empty').transform(data)
只产生
1

总之 根据具体要求,您可以使用上述任何过滤器,例如:

print jq('1,2').transform(data)
jq('.[] | .W // empty').transform(data)
道德的

如果这个故事有一个寓意,那就是当你有疑问的时候,你应该考虑使用JQ(命令行可执行文件)或JQPoice来确保你的JQ过滤器正在做你想要的。

这使得SOO有意义,我希望我能投票给你两次!谢谢