我完全是shell的新手......让我说出正确的用例。 使用案例: - 我在我的shell脚本中编写了两个get方法,当用户调用该脚本时,我将使用for循环对许多id执行一些操作。如下所示
test_get1(){
value1=//performing some operation and storing it
value2=//performing some operation and storing it
//below line I am converting the o/p of value1 and value2 in json
value=$JQ_TOOL -n --arg key1 "$value1" --arg key2 "$value2" '{"key1":"\($value1)","key2":"\($value2)"}'
}
test_get2(){
arr=(1,2,3)
local arr_values=()
for value in arr
do
// Calling test_get1 for each iteraion of this loop, like below
val=$(test_get1 $value)
//below line will store the values in array
arr_values+=("$val")
done
}
当我为上面的arr_values做回声时,我得到以下输出 输出
arr_values={
"key1":"value1",
"key2":"value2"
}
{
"key1":"value1",
"key2":"value2"
}
我想以json格式转换上面的值,如下所示。
json_value=[
{
"key1":"value1",
"key2":"value2"
},
{
"key1":"value1",
"key2":"value2"
}
]
我尝试用JQ做,但无法得到正确的结果。
答案 0 :(得分:1)
使用slurp选项:
jq -s . in.json > out.json
<强> in.json 强>
{
"key1": "value1",
"key2": "value2"
}
{
"key1": "value1",
"key2": "value2"
}
<强> out.json 强>
[
{
"key1": "value1",
"key2": "value2"
}
]
[
{
"key1": "value1",
"key2": "value2"
}
]
答案 1 :(得分:1)
1)您现有的“value =”行可以简化为:
value=$(jq -n --arg key1 "$value1" --arg key2 "$value2" '\
{key1: $value1, key2: $value2}')
因为--arg
总是将提供的值解释为字符串,并且因为jq表达式不需要遵循JSON的所有规则。
2)从您的脚本中,arr_value是一个JSON值的bash数组。要将其转换为JSON数组,您应该能够使用咒语,例如:
for r in "${a[@]}" ; do printf "%s" "$r" ; done | jq -s .
3)几乎肯定有更好的方法来实现你的最终目标。如果你只考虑一次调用jq,也许会有所帮助。