【问题标题】:Json response data extraction using linux command使用linux命令提取Json响应数据
【发布时间】:2021-12-27 09:43:50
【问题描述】:

下面是一个api端点的json响应,我想在下面的json响应数组中获取特定名称的id值。

{
  "self": "https://testtoo.atlassian.net/rest/api/3/project/TEST/version?maxResults=50&startAt=0",
  "maxResults": 50,
  "startAt": 0,
  "total": 2,
  "isLast": true,
  "values": [
    {
      "self": "https://testtoo.atlassian.net/rest/api/3/version/10001",
      "id": "10001",
      "description": "test release",
      "name": "test2",
      "archived": false,
      "released": true,
      "releaseDate": "2021-12-29",
      "userReleaseDate": "29/Dec/21",
      "projectId": 10000
    },
    {
      "self": "https://testtoo.atlassian.net/rest/api/3/version/10002",
      "id": "10002",
      "name": "test3",
      "archived": false,
      "released": true,
      "projectId": 10000
    }
  ]
}

例如:我想在名称键的帮助下获取名称 test3 的 id 值(10002)。使用 jq 我可以选择名称键,但我找不到使用名称键获取先前键值(id)的方法!我的要求是通过输入对应的name值来获取id值。

【问题讨论】:

    标签: json linux shell jq


    【解决方案1】:

    试试

    jq -r --arg name "test3" '.values[] | select(.name== $name).id'
    
    10002
    

    Demo

    【讨论】:

    • 我已将其进一步简化为 jq -r '.values[] | select(.name=="'"$name"'").id
    • @vikramanarut 在我看来,这并不简单。您的版本只是缩短了几个字符,由于引用混乱,可读性较差,最重要的是更容易受到code injection 的攻击。如果您的变量包含" 字符,jq 会将其解释为字符串边界并继续将后面的内容解释为变量内容。通过一些详细说明,甚至可以将恶意行为引入您的脚本。使用--arg,任何变量内容都不能进入执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多