加入收藏 | 设为首页 | 会员中心 | 我要投稿 徐州站长网 (https://www.0516zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

使用bashshell从json对象中的数组转换值

发布时间:2022-10-20 15:01:31 所属栏目:Unix 来源:未知
导读: 使用bashshell从json对象中的数组转换值
bashshellunix
使用bashshell从json对象中的数组转换值,bash,shell,unix,echo,jq,Bash,Shell,Unix,Echo,Jq,我对壳牌公司完全陌生。。。。。让我解释

使用bashshell从json对象中的数组转换值

bashshellunix

使用bashshell从json对象中的数组转换值,bash,shell,unix,echo,jq,Bash,Shell,Unix,Echo,Jq,我对壳牌公司完全陌生。。。。。让我解释一下正确的用例。用例:-我在shell脚本中编写了两个get方法,当用户调用该脚本时,我将使用for循环对许多id执行一些操作。如下test_get1(){value1=//performing some operation and storing itvalue2=//performing some operation and storing it//below line I am converting the o/p of value1

我对壳牌公司完全陌生。。。。。让我解释一下正确的用例。用例:-我在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_值进行echo时,我得到以下输出输出

我想将上面的值转换为json格式,如下所示

json_value=[
{
"key1":"value1",
"key2":"value2"
},
{
"key1":"value1",
"key2":"value2"
}
]

我试图用JQ来做,但无法得到正确的结果。

使用slurp选项:

jq -s . in.json > out.json

in.json

{
“键1”:“值1”,
“键2”:“值2”
}
{
“键1”:“值1”,
“键2”:“值2”
}

out.json

[
{
“键1”:“值1”,
“键2”:“值2”
}
]
[
{
“键1”:“值1”,
“键2”:“值2”
}
]

使用slurp选项:

jq -s . in.json > out.json

in.json

{
“键1”:“值1”,
“键2”:“值2”
}
{
“键1”:“值1”,
“键2”:“值2”
}

out.json

[
{
“键1”:“值1”,
“键2”:“值2”
}
]
[
{
“键1”:“值1”,
“键2”:“值2”
}
]

1)您现有的“value=”行可以简化为:

value=$(jq -n --arg key1 "$value1" --arg key2 "$value2" '\
   {key1: $value1, key2: $value2}')

因为

--arg

总是将提供的值解释为字符串,并且因为jq表达式不需要遵循JSON的所有规则

2) 在脚本中,arr_值是JSON值的bash数组。要将其转换为JSON数组,您应该能够使用以下咒语:

for r in "${a[@]}" ; do printf "%s" "$r" ; done | jq -s .

3) 几乎可以肯定,有一种更好的方式来实现你的最终目标。如果您只想打一次电话给jq,可能会有所帮助。

1)您现有的“value=”行可以简化为:

value=$(jq -n --arg key1 "$value1" --arg key2 "$value2" '\
   {key1: $value1, key2: $value2}')

因为

--arg

总是将提供的值解释为字符串,并且因为jq表达式不需要遵循JSON的所有规则

2) 在脚本中,arr_值是JSON值的bash数组。要将其转换为JSON数组,您应该能够使用以下咒语:

for r in "${a[@]}" ; do printf "%s" "$r" ; done | jq -s .

3) 几乎可以肯定UNIX Shell数组,有一种更好的方式来实现你的最终目标。如果您考虑只调用一次jq,可能会有所帮助。

发布实际有效的输入json结构您的输入

arr\u值

甚至不是有效的JSON@RomanPerekhrest我已经更新了question@umesh,

LS=/usr/bin/LS

等等都是一种反模式——这是一种不好的做法,因为有些人复制了他们在为20世纪70年代的shell编写的脚本中看到的东西,这些脚本没有缓存路径查找。这里绝对没有价值——如果需要重写

jq

,最好定义一个包装函数;使用变量只会降低可读性,并且(如果该变量包含绝对路径)会降低跨机器的可移植性。(…如果您的目标是在crond的默认路径不包含本地

jq

二进制文件的位置的系统上运行cron作业,那么正确的做法是在crontab文件中定义一个路径;即,在规范之前添加一行

PATH=/bin:/usr/bin:/usr/local/bin

)。发布实际有效的输入json结构您的输入

arr\u值

甚至不是有效的JSON@RomanPerekhrest我已经更新了question@umesh,

LS=/usr/bin/LS

等等都是一种反模式——这是一种不好的做法,因为有些人复制了他们在为20世纪70年代的shell编写的脚本中看到的东西,这些脚本没有缓存路径查找.这里绝对没有价值——如果需要重写

jq

,最好定义一个包装函数;使用变量只会降低可读性,并且(如果该变量包含绝对路径)会降低跨机器的可移植性。(…然而,如果您的目标是从系统上的cron作业运行,其中crond的默认路径不包含本地

jq

二进制文件的位置,那么正确的做法是在crontab文件中定义一个路径;即,在规范之前添加一行

PATH=/bin:/usr/bin:/usr/local/bin

)。

(编辑:徐州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章