jq以JSON格式输出结果

时间:2018-03-17 21:32:18

标签: json stream jq

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}]'

但不起作用。

2 个答案:

答案 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命令行选项。

对UPDATE的响应

生成以下形式的JSON对象:

{ "Commits": [ {...}, {...}, {...} ] }

你可以这样写:

jq '{Commits: [.[] | {message: .commit.message, name: .commit.committer.name}]}'

(jq理解' {提交:_}'简写。)