jq
假设
处理/过滤JSON输入并生成过滤器的结果 为JSON
但是,我发现在jq
进程/过滤器之后,输出结果不再是JSON格式。
,例如https://stedolan.github.io/jq/tutorial/#result5,即
$ curl -s 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.[] | {message: .commit.message, name: .commit.committer.name}'
{
"message": "Merge pull request #162 from stedolan/utf8-fixes\n\nUtf8 fixes. Closes #161",
"name": "Stephen Dolan"
}
{
"message": "Reject all overlong UTF8 sequences.",
"name": "Stephen Dolan"
}
. . .
有没有解决方法?
更新
如何将整个返回包装成以下的json结构:
{ "Commits": [ {...}, {...}, {...} ] }
我试过了:
jq '.[] | Commits: [{message: .commit.message, name: .commit.committer.name}]'
jq 'Commits: [.[] | {message: .commit.message, name: .commit.committer.name}]'
但不起作用。
答案 0 :(得分:1)
在同一页面上找到它
https://stedolan.github.io/jq/tutorial/#result6
如果你想把输出作为单个数组,你可以通过将过滤器包装在方括号中来告诉jq“收集”所有答案:
jq '[.[] | {message: .commit.message, name: .commit.committer.name}]'
答案 1 :(得分:1)
从技术上讲,除非另有说明(特别是使用-r
命令行选项),否则jq会生成JSON实体的流。
将JSON实体的输入流转换为包含它们的JSON数组的一种方法是使用-s
命令行选项。
生成以下形式的JSON对象:
{ "Commits": [ {...}, {...}, {...} ] }
你可以这样写:
jq '{Commits: [.[] | {message: .commit.message, name: .commit.committer.name}]}'
(jq理解' {提交:_}'简写。)