json - 如何将分号分隔的参数转换为json?
问题描述
我在 bash 中有这些变量。
DOC='ABC=123;CDE=345;CDE=IOP'
NEWVAR='101808'
NEWVAR2='10240404'
我想将它们组合起来并在 bash 中创建一个 json 字符串。
{
"ABC": "123",
"CDE": "345",
"CDE": "IOP",
"NEWVAR": "101808",
"NEWVAR2": "10240404"
}
只有 'DOC' 是用分号分隔的值。NEWVAR 和 NEWVAR2 只是纯文本。
我可以使用 jq 来做到这一点吗?
解决方案
DOC='ABC=123;CDE=345;CDE=IOP'
NEWVAR='101808'
NEWVAR2='10240404'
args=()
# parse $DOC and add jq --arg options to the array
while IFS='=' read -r -d ';' name value || [[ -n $name && -n $value ]]; do
args+=( --arg "$name" "$value" )
done < <(printf '%s' "$DOC")
# add the plain variables to the array
for var in NEWVAR NEWVAR2; do
args+=( --arg "$var" "${!var}" )
done
declare -p args
jq --null-input "${args[@]}" '$ARGS.named'
输出
declare -a args=([0]="--arg" [1]="ABC" [2]="123" [3]="--arg" [4]="CDE" [5]="345" [6]="--arg" [7]="CDE" [8]="IOP" [9]="--arg" [10]="NEWVAR" [11]="101808" [12]="--arg" [13]="NEWVAR2" [14]="10240404")
{
"ABC": "123",
"CDE": "345",
"NEWVAR": "101808",
"NEWVAR2": "10240404"
}
jq 显然忽略了重复的 --arg 变量。
推荐阅读
- java - 有没有办法让python产生与java相同的结果按位左移?
- css - SCSS 中的 Flexbox 多类选择器
- c# - 处理保存文件迁移的最佳方法
- node.js - 开玩笑测试通过但得到错误:最后连接 ECONNREFUSED 127.0.0.1:80
- android - 使用 Observable.zip(...) 时如何获取 API 响应?
- terraform - 无法从 azure repo(私人 repo)下载 terraform 模块
- laravel - 验证表 api 中的用户条目
- vuejs2 - 如何让插槽在 Quasar 布局中工作
- typescript - ViewController 属性在根组件中不起作用
- r - 显示选择文件