使用 jq 删除 JSON 响应中的斜杠字符
Remove slash character in JSON response using jq
Docker 引擎 API returns 容器名称带有 / 附加
{
"Id": "8dfafdbc3a40",
"Names": [
"/boring_feynman"
],
"Image": "ubuntu:latest",
"ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
"Command": "echo 1",
"Created": 1367854155,
"State": "Exited",
"Status": "Exit 0",
"Ports": [{
"PrivatePort": 2222,
"PublicPort": 3333,
"Type": "tcp"
}],
"Labels": {
"com.example.vendor": "Acme",
"com.example.license": "GPL",
"com.example.version": "1.0"
},
"SizeRw": 12288,
"SizeRootFs": 0,
"HostConfig": {
"NetworkMode": "default"
},
"NetworkSettings": {
"Networks": {}
},
"Mounts": [{
"Name": "fac362...80535",
"Source": "/data",
"Destination": "/data",
"Driver": "local",
"Mode": "ro,Z",
"RW": false,
"Propagation": ""
}]
}
我想删除斜线以便响应可以用作 JQ 中的 table:
jq -r '(["Names","Image"] | (., map(length*"-"))), (.[] | [.Names, .Image]) | @tsv'
目前,当我 运行 以上内容时,我得到:
jq: error (at <stdin>:1): array (["/boring_feynman"]) is not valid in a csv row
问题不是因为 .Names
字段中的 /
,而是你的表达式。要使 @csv
或 @tsv
等过滤器起作用,值需要采用标量格式并位于数组中。但是您的表达式 .Name
属于 array
.
类型
所以基本上您是将此结果传递给 @tsv
函数
[
[
"/boring_feynman"
],
"ubuntu:latest"
]
而不是
[
"/boring_feynman",
"ubuntu:latest"
]
所以修改您的过滤器,您可以针对有问题的 JSON 执行以下操作。
jq -r '(["Names","Image"] | (., map(length*"-"))), ([.Names[], .Image]) | @tsv'
或者如果您仍想删除 /
,请使用 gsub()
函数
jq -r '(["Names","Image"] | (., map(length*"-"))), ([ (.Names[] | gsub("^/";"")), .Image]) | @tsv'
Docker 引擎 API returns 容器名称带有 / 附加
{
"Id": "8dfafdbc3a40",
"Names": [
"/boring_feynman"
],
"Image": "ubuntu:latest",
"ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
"Command": "echo 1",
"Created": 1367854155,
"State": "Exited",
"Status": "Exit 0",
"Ports": [{
"PrivatePort": 2222,
"PublicPort": 3333,
"Type": "tcp"
}],
"Labels": {
"com.example.vendor": "Acme",
"com.example.license": "GPL",
"com.example.version": "1.0"
},
"SizeRw": 12288,
"SizeRootFs": 0,
"HostConfig": {
"NetworkMode": "default"
},
"NetworkSettings": {
"Networks": {}
},
"Mounts": [{
"Name": "fac362...80535",
"Source": "/data",
"Destination": "/data",
"Driver": "local",
"Mode": "ro,Z",
"RW": false,
"Propagation": ""
}]
}
我想删除斜线以便响应可以用作 JQ 中的 table:
jq -r '(["Names","Image"] | (., map(length*"-"))), (.[] | [.Names, .Image]) | @tsv'
目前,当我 运行 以上内容时,我得到:
jq: error (at <stdin>:1): array (["/boring_feynman"]) is not valid in a csv row
问题不是因为 .Names
字段中的 /
,而是你的表达式。要使 @csv
或 @tsv
等过滤器起作用,值需要采用标量格式并位于数组中。但是您的表达式 .Name
属于 array
.
所以基本上您是将此结果传递给 @tsv
函数
[
[
"/boring_feynman"
],
"ubuntu:latest"
]
而不是
[
"/boring_feynman",
"ubuntu:latest"
]
所以修改您的过滤器,您可以针对有问题的 JSON 执行以下操作。
jq -r '(["Names","Image"] | (., map(length*"-"))), ([.Names[], .Image]) | @tsv'
或者如果您仍想删除 /
,请使用 gsub()
函数
jq -r '(["Names","Image"] | (., map(length*"-"))), ([ (.Names[] | gsub("^/";"")), .Image]) | @tsv'