Jos*_*hak 1 json curl pipeline jq
我是 jq 的新手,所以如果这不是 jq 问题或 json 问题,请指出正确的方向。我不确定正确的术语,所以我很难正确地阐明问题。
我正在使用 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"
}
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时:
curl -X GET -H 'authorization: Basic somestring=' "https://myserver/myjson" |
jq '.[] | {id: .id, name: .name, channels: .channels, geofenceProfileId: .geofenceProfileId}' |
jq '.[] | select(.channels == 58b8a25cf9f6e19cf671872f)'
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
jq: 错误: 语法错误,意外的 IDENT,期待 ';' 或 ')'(Unix shell 引用问题?)在第 1 行:.[] | select(.channels == 58b8a25cf9f6e19cf671872f)
jq: 1 编译错误 % Total % Received % Xferd 平均速度时间时间时间当前 Dload Upload Total Spent Left Speed 100 351k 0 351k 0 0 1109k:--0 --: --:-- --:--:-- 1110k
这个错误是因为 jq 漂亮地打印了第一条语句的输出,而第二条语句期望它在一个代码块中吗?如果是这样,如何将其转换回非漂亮的打印格式,或者如何使用 jq 在输出上运行新的过滤器?
基本上,我试图解析数百条记录并过滤掉特定频道号或具有特定 geofenceProfileId 的所有记录。
我建议你开始:
jq 'select(.channels | index("58b8a25cf9f6e19cf671872f"))'
Run Code Online (Sandbox Code Playgroud)
事实上,这甚至可能正是您想要的过滤器。如果您想在进行选择后删除“频道”,您可以按如下方式增加上面的过滤器:
select(.channels | index("58b8a25cf9f6e19cf671872f")) | del(.channels)
Run Code Online (Sandbox Code Playgroud)
需要注意的主要事情是,可以在一次 jq 调用中创建管道。所以很可能你最终会得到:curl ... | jq ...
jq 表达式{"id": .id}可以缩写为{id},而不是:
{id.id, name: .name, channels: .channels, geofenceProfileId: .geofenceProfileId}
Run Code Online (Sandbox Code Playgroud)
你可以写:
{id, name, channels, geofenceProfileId}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4731 次 |
| 最近记录: |