jq是假设的
处理/过滤JSON输入并将过滤器的结果生成为JSON
但是,我发现在jq过程/过滤之后,输出结果不再是JSON格式。
例如, https://stedolan.github.io/jq/tutorial/#result5 ,即,
{ "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" }有什么解决方法吗?
jq is suppose to
process/filter JSON inputs and producing the filter's results as JSON
However, I found that after the jq process/filter, output result is no longer in JSON format any more.
E.g., https://stedolan.github.io/jq/tutorial/#result5, i.e.,
$ 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" } . . .Is there any workaround?
UPDATE:
How to wrap the whole return into a json structure of:
{ "Commits": [ {...}, {...}, {...} ] }I've tried:
jq '.[] | Commits: [{message: .commit.message, name: .commit.committer.name}]' jq 'Commits: [.[] | {message: .commit.message, name: .commit.committer.name}]'but neither works.
最满意答案
找到它,在同一页上,
https://stedolan.github.io/jq/tutorial/#result6
jq '[.[] | {message: .commit.message, name: .commit.committer.name}]'如果您想将输出作为单个数组获取,您可以通过将过滤器包装在方括号中来告诉jq“收集”所有答案:
Technically speaking, unless otherwise instructed (notably with the -r command-line option), jq produces a stream of JSON entities.
One way to convert an input stream of JSON entities into a JSON array containing them is to use the -s command-line option.
Response to UPDATE
To produce a JSON object of the form:
{ "Commits": [ {...}, {...}, {...} ] }you could write something like:
jq '{Commits: [.[] | {message: .commit.message, name: .commit.committer.name}]}'(jq understands the '{Commits: _}' shorthand.)
更多推荐
发布评论