将JSON数组转换为保留空白的bash数组



我想将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)

bash3.2中(这似乎是你一直在使用的内容(,你需要一些稍微笨拙一点的

while IFS= read -r line; do
test_cases+=("$line")
done < <(jq -c '.[]' data.json)

相关内容

  • 没有找到相关文章

最新更新