【问题标题】:Bash - Parse associative Array to JSON with k-vBash - 使用 k-v 将关联数组解析为 JSON
【发布时间】:2021-09-08 11:44:31
【问题描述】:

这里的例子:

#!/bin/bash

declare -A rep_hostname
rep_hostname=( [test1]='172.1.1.1' [test2]='172.1.1.2' [test3]='172.1.1.3' )

json=$(
        jo members="$(
                jo -a "${rep_hostname[@]}" |
                jq -c 'to_entries | map({ "_id": .key, "host": .value })'
        )"
)

echo "$json"

输出以下内容:

{
    "members":[
      {"_id":0,"host":"172.1.1.3:2701"},
      {"_id":1,"host":"172.1.1.2:2701"},
      {"_id":2,"host":"172.1.1.1:2701"}
    ]
}

如何制作下面的JSON?

{
    "test1":"172.1.1",
    "test2":"172.1.1.2",
    "test3":"172.1.1.3"
}

【问题讨论】:

  • 关联数组和这个有什么关系?如果您只有 JSON,您可以使用 jq 解析它并生成所需的 JSON。如果从关联数组开始,则不需要首先定义json;您可以直接使用数组。
  • 需要做从关联数组到json映射并返回。
  • 那么,您分配给json 的值与此有什么关系?

标签: bash jq jo


【解决方案1】:

参照。 https://unix.stackexchange.com/questions/366581/bash-associative-array-printing

jo $(paste -d= <(printf "%s\n" "${!rep_hostname[@]}") <(printf "%s\n" "${rep_hostname[@]}"))

printf 命令将按行输出关联的键和值,paste -d= ... 将合并由= 符号绑定的生成行,最后jo 处理器将从那里构建一个 JSON。

更迭代的等价物也可以是:

for i in "${!rep_hostname[@]}";do printf "%s=%s\n" "$i" "${rep_hostname[$i]}";done | jo

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多