【问题标题】:select specific values from json & convert into bash variables从 json 中选择特定值并转换为 bash 变量
【发布时间】:2020-10-15 20:34:02
【问题描述】:

我是 jq 的新手,我有以下 JSON,我需要提取四个值,即 SAUCE_KEY、sauceKey、SAUCE_VALUE、sauceValue 等。我需要将这些 bash 变量转换为即

SAUCE_KEY=sauceKey
SAUCE_VALUE=sauceValue

如果我要回显它,它应该打印它的值,即。回声 $SAUCE_KEY

我使用的代码是:

jq -r '.env_vars[] | with_entries(select([.key] | inside([".env_vars[].name", ".env_vars[].value"])))' | jq -r "to_entries|map(\"\(.value)=\(.value|tostring)\")|.[]"

通过这样做,我能够获得如下值 name=SAUCE_KEY, value=sauceKey 等等。

{
  "@type": "env_vars",
  "env_vars": [
    {
      "@type": "env_var",
      "@href": "/repo/xxxxx/env_var/xxxxx",
      "@representation": "standard",
      "@permissions": {
        "read": true,
        "write": true
      },
      "name": "SAUCE_KEY",
      "value": "sauceKey"
    },
    {
      "@type": "env_var",
      "@href": "/repo/xxxxx/env_var/xxxxx",
      "@representation": "standard",
      "@permissions": {
        "read": true,
        "write": true
      },
      "name": "SAUCE_VALUE",
      "value": "sauceValue"
    }
  ]
}

【问题讨论】:

标签: json bash select jq


【解决方案1】:

如果不是尝试从 JSON 中提取变量名称,而是使用名称作为键填充关联数组,这非常简单。

#!/usr/bin/env bash

declare -A sauces
while IFS=$'\001' read -r name value; do
    sauces[$name]=$value
done < <(jq -r '.env_vars[] | "\(.name)\u0001\(.value)"' saucy.json)

for name in "${!sauces[@]}"; do
    echo "$name is ${sauces[$name]}"
done

打印出来

SAUCE_VALUE is sauceValue
SAUCE_KEY is sauceKey

【讨论】:

  • 谢谢,在你回答之后,我想我离最终解决方案只有一步之遥,你能否澄清以下几点:1.上面粘贴在我的问题中的 JSON,从 Curl 的响应中获取bash 然后保存到 var 但让我知道如何将它保存到 json 文件,即 saucy.json 2. 面对问题:* env-var.sh: 14: env-var.sh: declare: not found (我猜“声明-A酱”)* env-var.sh:17:env-var.sh:语法错误:重定向意外(我猜是由于符号为“
  • @AbidRana 听起来你没有使用 bash,或者可能是一个非常旧的版本。
  • 哦,还有curl whatever &gt; saucy.json。或者避免文件并将 curl 的 JSON 输出直接提供给 jq:curl whatever | jq -r 'whatever'
  • 您推荐的解决方案在我的 win10 上运行良好(GNU bash,版本 4.4.19(2)-release (x86_64-pc-msys))。我只是想知道,如果您知道我如何在 Tracis ci 中更新/相同版本?
猜你喜欢
  • 2017-01-08
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 2017-11-29
  • 1970-01-01
相关资源
最近更新 更多