【问题标题】:Correctly parsing data with jq用 jq 正确解析数据
【发布时间】:2018-07-19 22:46:30
【问题描述】:

我有以下数据:

[
    {
        "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][]').transform(data) 我得到 None,但是当我这样做时 jq('[.[].M][]').transform(data) 我得到了想要的结果。为什么我会遇到这种情况?

【问题讨论】:

    标签: python stream jq


    【解决方案1】:

    我正在尝试提取“W”的列表。

    好的,那我们先处理jq,再处理python接口。

    jq

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

    • null(因为第一项没有.W),并且
    • 想要的列表

    要仅提取“W”的列表,您可以使用以下任何过滤器, 取决于您的具体要求:

    .[] | select(has("W")) | .W
    
    .[] | .W | select(.)
    
    .[] | .W // empty
    
    .[1].W
    

    从 jq 导入 jq

    正如https://pypi.org/project/pyjq/ 的文档所说:

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

    例如:

    print jq('1,2').transform(data)
    

    只产生1

    总结

    根据具体要求,您可以使用上面给出的任何过滤器,例如:

    jq('.[] | .W // empty').transform(data)
    

    道德

    如果这个故事有什么寓意的话,可能是,当有疑问时,应该考虑使用 jq(命令行可执行文件)或 jqplay 来确保您的 jq 过滤器正在执行您想要的操作。

    【讨论】:

    • 这很有意义,我希望我能两次支持你!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多