读取json并将密钥存储为bash变量

读取json并将密钥存储为bash变量,json,bash,shell,Json,Bash,Shell,我试图读取json文件,并将键存储为bash变量,将值存储为变量值。例如,下面是我的test.json: { "Day":'0', "num":'85', "Qtr":"[20183, 20184, 20191, 20192]", "pSize":"75" } 我需要将如下变量存储在bash文件中: $Day=0 $num=85 $Qtr=[20183

我试图读取json文件,并将键存储为bash变量,将值存储为变量值。例如,下面是我的test.json:

{
"Day":'0',
"num":'85',
"Qtr":"[20183, 20184, 20191, 20192]",
"pSize":"75"
}
我需要将如下变量存储在bash文件中:

    $Day=0
    $num=85
    $Qtr=[20183, 20184, 20191, 20192]
    $psize=75
我找到了一种使用jq提取值的方法,但是我无法将键作为变量存储在bash中

-bash-4.2$ Qtr=`jq .Qtr test.json`
-bash-4.2$ echo $Qtr
"[20183, 20184, 20191, 20192]"
有没有人能提供一个片段,告诉我们如何循环一个json文件,并将键存储为变量,将值存储为值


提前感谢您

请尝试以下操作:

#!/bin/bash

while IFS== read key value; do
    printf -v "$key" "$value"
done < <(jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' test.json)

# test of the variables
echo "Day: $day"
echo "Qtr: $Qtr"
echo "num: $num"
echo "pSize: $pSize"
#/bin/bash
而IFS==读取键值;做
printf-v“$key”“$value”

完成<您是否尝试导出Qtr=
jq.Qtr test.json
?谢谢。是的,你可以看到我的帖子,我已经试过了。主要问题是如何在bash中将键存储为变量?存储是什么意思?你到底想干什么?您不是在回显存储值吗?上面的JSON中有一些错误。1:你不应该使用单引号
和2:看起来像数组的东西不是因为它实际上是一个字符串(它周围有引号)。一旦你解决了字符串问题:
Qtr=($(jq.Qtr[]test.json))
,这正是我想要的。它就像一个符咒。非常感谢您展示这段代码片段,我也非常感谢您的解释。