json - JSON 子数组到 Bash 关联数组
问题描述
我有这个带有测量数据的 JSON:
{
"errorCode":0,
"statusDataInfo":{
"function-status-text-005":{
"textValue":"2006-0310",
"type":"basic-text"
},
"function-status-text-027":{
"type":"simple-value",
"value":"50"
},
"function-status-text-049":{
"type":"simple-value",
"value":""
},
"function-status-text-025":{
"type":"simple-value",
"value":"43"
},
"function-status-text-047":{
"type":"simple-value",
"value":""
},
"function-status-text-068":{
"type":"simple-value",
"value":"0"
},
"function-status-text-009":{
"type":"simple-value",
"value":"22"
},
"function-status-text-007":{
"textValue":"2006-0325",
"type":"basic-text"
},
"function-status-text-029":{
"type":"simple-value",
"value":""
},
"function-status-text-041":{
"textValue":"2006-0960",
"type":"basic-text"
},
"function-status-text-063":{
"type":"simple-value",
"value":"3"
},
"function-status-text-060":{
"type":"simple-value",
"value":"67"
},
"function-status-text-023":{
"type":"simple-value",
"value":""
},
"function-status-text-045":{
"textValue":"2006-0300",
"type":"basic-text"
},
"function-status-text-021":{
"type":"simple-value",
"value":""
},
"function-status-text-043":{
"textValue":"2006-0300",
"type":"basic-text"
},
"function-status-text-065":{
"type":"simple-value",
"value":"0"
},
"function-status-text-015":{
"type":"simple-value",
"value":"0"
},
"function-status-text-037":{
"type":"simple-value",
"value":"1550"
},
"function-status-text-058":{
"type":"simple-value",
"value":"163"
},
"function-status-text-013":{
"type":"simple-value",
"value":"22"
},
"function-status-text-035":{
"type":"simple-value",
"value":"11.22"
},
"function-status-text-019":{
"type":"simple-value",
"value":""
},
"function-status-text-017":{
"type":"simple-value",
"value":"24"
},
"function-status-text-039":{
"textValue":"2006-0940",
"type":"basic-text"
},
"function-status-text-051":{
"type":"simple-value",
"value":""
},
"function-status-text-056":{
"type":"simple-value",
"value":"0"
},
"function-status-text-011":{
"type":"simple-value",
"value":"22"
},
"function-status-text-031":{
"type":"simple-value",
"value":"19"
},
"function-status-text-053":{
"type":"simple-value",
"value":"-"
}
},
"statusBackgroundDataInfo":{
"0xA0":{
"value":"0"
},
"0x20":{
"value":"0"
},
"0xE1":{
"value":"0"
},
"0xE0":{
"value":"1"
},
"0xFA":{
"value":"0"
},
"0xF0":{
"value":"1"
},
"0x80":{
"value":"1"
},
"0xF9":{
"value":"1"
},
"0xC4":{
"value":"0"
}
}
}
我想要的是一个由它组成的 bash 关联数组,我可以像这样访问 JSON 中的值:
myArray[function-status-text-005][type]
myArray[function-status-text-005][value]
我尝试了 Stackoverflow 和网络上的许多解决方案,但我无法使用任何解决方案。任何帮助,将不胜感激
亲切的问候
编辑
我在这个 Stackoverflow 链接中尝试了解决方案,但它不起作用。它需要一个顶级阵列,而我的则是整齐的statusDataInfo
EDIT2 感谢@Cyrus,我更进一步:
jsonValues=$(cat data.json | jq -r '.statusDataInfo | to_entries|map("\(.key)=\(.value)")|.[]')
for i in "${!jsonValues[@]}"
do
echo "key : $i"
echo "value: ${jsonValues[$i]}"
done
准备好进入一个 assoc 数组,但它只有一个键,对应的值包含来自 json 的所有信息:
key : 0
value: function-status-text-005={"textValue":"2006-0310","type":"basic-text"}
function-status-text-027={"type":"simple-value","value":"50"}
function-status-text-049={"type":"simple-value","value":""}
function-status-text-025={"type":"simple-value","value":"43"}
function-status-text-047={"type":"simple-value","value":""}
function-status-text-068={"type":"simple-value","value":"0"}
function-status-text-009={"type":"simple-value","value":"22"}
function-status-text-007={"textValue":"2006-0325","type":"basic-text"}
function-status-text-029={"type":"simple-value","value":""}
function-status-text-041={"textValue":"2006-0960","type":"basic-text"}
function-status-text-063={"type":"simple-value","value":"3"}
function-status-text-060={"type":"simple-value","value":"67"}
function-status-text-023={"type":"simple-value","value":""}
function-status-text-045={"textValue":"2006-0300","type":"basic-text"}
function-status-text-021={"type":"simple-value","value":""}
function-status-text-043={"textValue":"2006-0300","type":"basic-text"}
function-status-text-065={"type":"simple-value","value":"0"}
function-status-text-015={"type":"simple-value","value":"0"}
function-status-text-037={"type":"simple-value","value":"1550"}
function-status-text-058={"type":"simple-value","value":"163"}
function-status-text-013={"type":"simple-value","value":"22"}
function-status-text-035={"type":"simple-value","value":"11.22"}
function-status-text-019={"type":"simple-value","value":""}
function-status-text-017={"type":"simple-value","value":"24"}
function-status-text-039={"textValue":"2006-0940","type":"basic-text"}
function-status-text-051={"type":"simple-value","value":""}
function-status-text-056={"type":"simple-value","value":"0"}
function-status-text-011={"type":"simple-value","value":"22"}
function-status-text-031={"type":"simple-value","value":"19"}
function-status-text-053={"type":"simple-value","value":"-"}
解决方案
myArray[function-status-text-005][type]
myArray[function-status-text-005][value]
我尝试了 Stackoverflow 和网络上的许多解决方案,但我无法使用任何解决方案
这是因为 bash 不支持这种索引,如下所示:
$ echo $BASH_VERSION
5.0.7(1)-release
$ declare -A ary
$ ary["a"]=("x" "y z")
bash: ary["a"]: cannot assign list to array member
有关“解决方法”和替代方法,请参见例如
由于您的数据只有两种“类型”,您可能需要考虑最简单的选项之一:拥有两个关联数组。所以不要写:
myArray[function-status-text-005][type]
你会写这样的东西:
type[function-status-text-005]
推荐阅读
- asp.net-mvc - Blazor 服务器 - 未处理异常的全局日志记录
- php - 如何使用 PHP 将图像上传到谷歌“按图像搜索”?
- java - 有没有办法根据用户输入创建页面/活动或类似的东西?
- python - Moviepy 子剪辑在最后捕获了额外的 4 秒
- javascript - 关于产品变体描述
- functional-programming - 您可以在 F# 查询表达式中运行 SQL 函数吗?
- java - 使用 maven 插件无效凭据将 Java 部署到 Heroku
- python - 如何使用python查找和删除损坏的文件
- jestjs - 当 Jest 位于 node_modules 中时,它不会解析 TypeScript 配置文件
- apache-flink - Flink SQL Savepoint 在 sql-client.sh 中不起作用