首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jq创建json对象数组并在bash中设置为var

如何使用jq创建json对象数组并在bash中设置为var
EN

Stack Overflow用户
提问于 2021-08-26 14:33:15
回答 2查看 177关注 0票数 0

我的bash脚本中有如下变量:

代码语言:javascript
复制
server1_name = 'server-1'
server1_url = 'http://server-1.net'

server2_name = 'server-2'
server2_url = 'http://server-2.net'

我如何使用我的变量创建像这样的json并设置为new var:

代码语言:javascript
复制
[
  {
    "name": "server-1",
    "url": "http://server-1.net"
  },
  {
    "name": "server-2",
    "url": "http://server-2.net"
  }
]

我尝试过的:

代码语言:javascript
复制
export jsonArray = $("[{\"name\":"$server1_name",\"url\":\"$server1_url\"},{\"name\":"$server2_name",\"url\":\"$server2_url\"}]" | jq -rec .)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-26 14:38:29

使用--arg传递字符串,然后可以按预期创建JSON:

代码语言:javascript
复制
#!/bin/bash

server1_name='server-1'
server1_url='http://server-1.net'

server2_name='server-2'
server2_url='http://server-2.net'

result=$(jq -n \
    --arg name1 "$server1_name" \
    --arg url1 "$server1_url" \
    --arg name2 "$server2_name" \
    --arg url2 "$server2_url" \
    '[ { "name": $name1, "url": $url1 }, { "name": $name2, "url": $url2 } ]')

echo "$result"

将产生:

代码语言:javascript
复制
[
  {
    "name": "server-1",
    "url": "http://server-1.net"
  },
  {
    "name": "server-2",
    "url": "http://server-2.net"
  }
]
票数 4
EN

Stack Overflow用户

发布于 2021-08-26 15:00:13

您可以构造两个名称和urls数组,然后调整this answer以将这两个数组“压缩”到所需的对象数组中。

代码语言:javascript
复制
jq -n \
    --arg name1 "$server1_name" \
    --arg url1 "$server1_url" \
    --arg name2 "$server2_name" \
    --arg url2 "$server2_url" \
'[$name1, $name2] as $names |
 [$url1, $url2] as $urls |
  [([$names, $urls] | transpose[]) as [$name, $url] |{$name, $url}]'

这样做的好处是,随着名称/url对数量的增加,您只需要修改定义$names$urls的前两个过滤器;其余的过滤器保持不变。您甚至可以将其划分为jq的单独使用,以便于定义大型服务器列表。

代码语言:javascript
复制
names=$(jq -n --arg v1 "$server1_name" --arg v2 "$server2_name" '[$v1, $v2]')

urls=$(jq -n --arg v1 "$server1_url" --arg v2 "$server2_url" '[$v1, $v2]')

jq -n \
   --argjson names "$names" \
   --argjson urls "$urls" \
   '[([$names, $urls] | transpose[]) as [$name, $url] | {$name, $url}]'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68940509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档