我是jq的新手,所以如果这不是jq问题或json问题,请给我指出正确的方向。我不确定正确的术语,所以它使我很难正确地表达问题。
我使用to curl来提取一些json,我想过滤掉带有特定值的键。下面是一些示例json:
{
"id": "593f468c81aaa30001960e16",
"name": "Name 1",
"channels": [
"593f38398481bc00019632e5"
],
"geofenceProfileId": null
}
{
"id": "58e464585180ac000a748b57",
"name": "Name 2",
"channels": [
"58b480097f04f20007f3cdca",
"580ea26616de060006000001"
],
"geofenceProfileId": null
}
{
"id": "58b4d6db7f04f20007f3cdd2",
"name": "Name 3",
"channels": [
"58b8a25cf9f6e19cf671872f"
],
"geofenceProfileId": "57f53018271c810006000001"
}
当我运行以下命令时:
curl -X GET -H 'authorization: Basic somestring=' "https://myserver/myjson" |
jq '.[] | {id: .id, name: .name, channels: .channels, geofenceProfileId: .geofenceProfileId}' |
jq '.[] | select(.channels == 58b8a25cf9f6e19cf671872f)'
出现以下错误:
jq:error:语法错误,意外的IDENT,应为“;'或')'(Unix shell引用问题?),位于第1行:.[]|选择(.通道==
jq:1编译错误%总计%已接收% Xferd平均速度时间时间时间当前卸载上载总计已用左侧速度100 351 k 0 351 k 0 0 1109 k 0 --:---:-----:-----:---------1110 k
这个错误是因为jq pretty打印了第一个语句的输出,而第二个语句希望它在一个代码块中吗?如果是这样,我该如何将它转换回非pretty打印格式,或者我该如何使用jq对输出运行一个新的过滤器?
基本上,我正在尝试解析数百条记录,并筛选出特定频道号中或具有特定geofenceProfileId的所有记录。
2条答案
按热度按时间bzzcjhmw1#
我建议你从以下内容开始:
实际上,这可能正是您想要的过滤器。如果您想在选择后删除“频道”,您可以按如下方式增加上面的过滤器:
需要注意的主要事情是,一个人可以在一次jq调用中创建一个管道。所以最有可能的结果是:
curl ... | jq ...
顺便提一下
jq表达式
{"id": .id}
可以缩写为{id}
,因此,将其替换为:你可以写:
pokxtpni2#
可能和你的案子无关但我成功地把我的指挥部
至
结果是一样的。也许这会有帮助。所以我们的想法是在jq语句中使用管道