首页 > 解决方案 > 读取 json 并将密钥存储为 bash 变量

问题描述

我正在尝试读取 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 文件并将键存储为变量和值存储为值的片段吗?

先感谢您

标签: jsonbashshell

解决方案


请您尝试以下方法:

#!/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"
  • jq命令jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' test.json将 json 对象转换key=value成对。
  • 的输出通过进程替换jq馈送到while循环中 <(command)
  • 该命令的-v varname选项printf将间接表示的变量分配给varname输出。

推荐阅读