我想将JSON文件转换为字符串的bash数组,稍后可以对其进行迭代。我的JSON结构如下:
[
{
"USERID": "TMCCP",
"CREATED_DATE": "31/01/2020 17:52"
},
{
"USERID": "TMCCP",
"CREATED_DATE": "31/01/2020 17:52"
}
]
这是我的bash脚本:
test_cases=($(jq -c '.[]' data.json))
echo ${test_cases[0]}
echo ${test_cases[1]}
echo ${test_cases[2]}
echo ${test_cases[3]}
正如您所看到的,它返回的数组包含4个元素,而不是2个。输出:
{"USERID":"TMCCP","CREATED_DATE":"31/01/2020
17:52"}
{"USERID":"TMCCP","CREATED_DATE":"31/01/2020
17:52"}
由于某些原因,日期字段中有空格会导致一些解析问题。知道怎么克服这个吗?
请改用readarray
。
$ readarray -t test_cases < <(jq -c '.[]' file)
$ declare -p test_cases
declare -a test_cases=([0]="{"USERID":"TMCCP","CREATED_DATE":"31/01/2020 17:52"}" [1]="{"USERID":"TMCCP","CREATED_DATE":"31/01/2020 17:52"}")
在readarray
不可用的情况下,可以使用read
,如下所示。
IFS=$'n' read -d '' -a test_cases < <(jq -c '.[]' file)
使用readarray
填充数组,而不是使用无引号的命令替换;bash
在将结果拆分为单独的单词时并不关心JSON引用。
readarray -t test_cases < <(jq -c '.[]' data.json)
在bash
3.2中(这似乎是你一直在使用的内容(,你需要一些稍微笨拙一点的
while IFS= read -r line; do
test_cases+=("$line")
done < <(jq -c '.[]' data.json)