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
将产生两项:
(因为第一项没有.W),并且null
- 所需列表
.[] | 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有意义,我希望我能投票给你两次!谢谢