我们可以通过两种方式解决这个问题。它们分别是:
输入字符串:
{
"keys": ["key1","key2","key3"]
}
方法一:
1)使用 jq -r
(输出原始字符串,而非 JSON 文本)。
KEYS=$(jq -r '.keys' test.json)
echo $KEYS
2) 使用@sh
(将输入字符串转换为一系列以空格分隔的字符串)。它从字符串中删除方括号[]和逗号(,)。
KEYS=$(<test.json jq -r '.keys | @sh')
echo $KEYS
3) 使用 tr
命令从字符串输出中移除单引号。 若要删除特定字符,请在 tr
命令中使用 -d 选项。
KEYS=$((<test.json jq -r '.keys | @sh')| tr -d \')
echo $KEYS
# Output: key1 key2 key3
4) 通过将逗号分隔的字符串放入圆括号()中,我们可以将其转换为数组。它也被称为复合赋值,其中我们使用一些值声明数组。
ARRAYNAME=(value1 value2 .... valueN)
#!/bin/bash
KEYS=($((<test.json jq -r '.keys | @sh') | tr -d \'\"))
echo "Array size: " ${#KEYS[@]}
echo "Array elements: "${KEYS[@]}
方法二:
1) 使用jq -r
获取字符串输出,然后使用tr
删除诸如方括号、双引号和逗号等字符。
#!/bin/bash
KEYS=$(jq -r '.keys' test.json | tr -d '[],"')
echo $KEYS
2) 然后我们可以通过将逗号分隔的字符串放置在圆括号()中来将其转换为数组。
#!/bin/bash
KEYS=($(jq -r '.keys' test.json | tr -d '[]," '))
echo "Array size: " ${#KEYS[@]}
echo "Array elements: "${KEYS[@]}
jq '.logs' | jq '.[]' | jq '._id'
,而不是直接使用jq '.logs[]._id'
? - hobbs