【问题标题】:Filter json file objects into a separate json file with jq使用 jq 将 json 文件对象过滤成单独的 json 文件
【发布时间】:2014-12-16 14:02:36
【问题描述】:

目前,我成功地将带有 JQ 的 curl 输出导出到具有有效 json 的文件中。

评论如下:

jsonValues=<curl command> | jq '.["issues"] | map({key: .key, type: .fields.issuetype.name, typeid: .fields.issuetype.id, status: .fields.status.name, summary: .fields.summary})' > FullClosedIssueList.json; `

你可以看到我用这个命令做了两件事:

  • 将所有结果放入jsonValues
  • 导出到FullClosedIssueList.json

我发现jsonValues 对象的格式缺失[],

{
  "key": "ON-12345",
  "type": "Bug",
  "typeid": "1",
  "status": "Closed",
  "summary": "Some Bug Title"
}
{
  "key": "ON-12346",
  "type": "Bug",
  "typeid": "1",
  "status": "Closed",
  "summary": "Some Other Bug Title"
}

而文件输出是有效的 json。

[
  {
    "key": "ON-12345",
    "type": "Bug",
    "typeid": "1",
    "status": "Closed",
    "summary": "Some Bug Title"
  },
  {
    "key": "ON-12346",
    "type": "Bug",
    "typeid": "1",
    "status": "Closed",
    "summary": "Some Other Bug Title"
  }
]

我需要向 JQ 添加什么命令,以便传递给 bash 变量的对象是有效的 json?

编辑:这与here描述的问题相同

【问题讨论】:

  • 你在做echo $jsonValues 还是echo "$jsonValues"?通常,您会希望始终对变量进行 dbl-quote。祝你好运。
  • jsonValues 将被设置为 CURL 命令的输出,字符串“jsonValues=”将被输入到 jq,这将失败,因为它不是有效的 JSON...如果这是关于 JIRA REST API,应该从 CURL 调用返回有效的 JSON,如:developer.atlassian.com/display/JIRADEV/…
  • 我很惊讶您在该变量中有 any 值。如果要保存到文件将输出捕获到变量中,请像这样使用teeoutput=$( some command | tee filename ) -- $output 应该与文件具有完全相同的内容
  • @glennjackman 即使我直接从命令行执行<FullClosedIssueList.json jq '.[] | select(.typeid=="1")' > ClosedBugsList.json,我也会遇到同样的问题。输出文件已删除以下内容:[],
  • 你也需要"map"命令,其中选择命令应该包含在`

标签: json bash curl jq


【解决方案1】:

你也需要“map”命令,其中应该包含选择命令:

cat FullClosedIssueList.json | jq '.[] | map(select(.typeid=="1"))' 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多