gpt4 book ai didi

arrays - 将使用 jq 解析的数组分配给 Bash 脚本数组

转载 作者:行者123 更新时间:2023-12-03 18:17:22 38 4
gpt4 key购买 nike

我用 jq 解析了一个 json 文件,如下所示:

# cat test.json | jq '.logs' | jq '.[]' | jq '._id' | jq -s

它返回一个这样的数组: [34,235,436,546,.....]
使用 bash 脚本我描述了一个数组:
# declare -a msgIds = ...

此数组使用 ()而不是 []所以当我将上面给出的数组传递给这个数组时,它不起作用。
([324,32,45..])这会导致问题。如果我删除 jq -s ,形成一个只有 1 个成员的数组。

有没有办法解决这个问题?

最佳答案

我们可以通过两种方式解决这个问题。他们是:

输入字符串:

// test.json
{
"keys": ["key1","key2","key3"]
}

方法一:

1) 使用 jq -r (输出原始字符串,而不是 JSON 文本)。
KEYS=$(jq -r '.keys' test.json)
echo $KEYS
# Output: [ "key1", "key2", "key3" ]

2) 使用 @sh (将输入字符串转换为一系列以空格分隔的字符串)。它从字符串中删除方括号[]、逗号(,)。
KEYS=$(<test.json jq -r '.keys | @sh')
echo $KEYS
# Output: 'key1' 'key2' 'key3'

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[@]}

# Output:
# Array size: 3
# Array elements: key1 key2 key3

方法二:

1) 使用 jq -r获取字符串输出,然后使用 tr删除方括号、双引号和逗号等字符。
#!/bin/bash
KEYS=$(jq -r '.keys' test.json | tr -d '[],"')
echo $KEYS

# Output: key1 key2 key3

2)然后我们可以通过将我们的字符串输出放在圆括号()中来将逗号分隔的字符串转换为数组。
#!/bin/bash
KEYS=($(jq -r '.keys' test.json | tr -d '[]," '))

echo "Array size: " ${#KEYS[@]}
echo "Array elements: "${KEYS[@]}

# Output:
# Array size: 3
# Array elements: key1 key2 key3

关于arrays - 将使用 jq 解析的数组分配给 Bash 脚本数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54087481/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com