json - 读取 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 文件并将键存储为变量和值存储为值的片段吗?
先感谢您
解决方案
请您尝试以下方法:
#!/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
输出。
推荐阅读
- python - 熊猫数据框将多行和多列转换为单行[键]和列[键]
- java - ExecutorService 应该等到一批 taksk 完成后再重新开始
- javascript - React Ant design Uncaught TypeError:无法读取未定义的属性“组件”
- amazon-aurora - 在 RDS Aurora 中创建数据库实例之前是否需要等待集群创建完成?
- python - 我不确定我是否已将字符串正确转换为整数?
- api - JScript REST API:读取分页列表
- python - Web Scrape - 如何使用包含值单击基于选择名称的选项?
- sql - 在 oracle sql 中替代 PIVOT
- c# - 在dot net core c#上使用OpenTK录制立体声(双通道)WAV文件
- git - VueJS 在更新时在不同的分支中保持相同的依赖版本