gpt4 book ai didi

json - 将 docker ps 输出格式化为 JSON 的 Golang 模板

转载 作者:行者123 更新时间:2023-12-01 19:38:38 24 4
gpt4 key购买 nike

我想知道是否可以添加使此输出成为有效 JSON 字符串所需的附加格式。为此,我需要在开头一个字符,除最后一行外的每一行一个字符,然后是最后一个字符。

我目前有这个;

$ sudo docker ps --format "{ \"{{.ID}}\" : \"{{.Names}}\"}"
{ "85c4c597bef9" : "addon_a0d7b954_nodered"}
{ "ec3c55af0497" : "addon_a0d7b954_appdaemon"}
{ "63e3081fbe42" : "addon_a0d7b954_logviewer"}

我不知道如何使用 Go 在开始时只输出一个字符(或者即使可能)。

最佳答案

问题在于您指定了一个模板,但该模板单独应用于您的每个容器,并且每个模板结果都在新行中呈现。您的模板不适用于项目列表,而是应用于单个项目,结果的输出方式(行的连接方式)不在您的控制范围内。

但是您可以使用 linux 命令实现您想要的。

此代码演示了您的模板是如何执行的:

src := "{ \"{{.ID}}\" : \"{{.Names}}\"}"
t := template.Must(template.New("").Parse(src))

ps := []map[string]string{
{"ID": "85c4c597bef9", "Names": "addon_a0d7b954_nodered"},
{"ID": "ec3c55af0497", "Names": "addon_a0d7b954_appdaemon"},
{"ID": "63e3081fbe42", "Names": "addon_a0d7b954_logviewer"},
}

for _, p := range ps {
if err := t.Execute(os.Stdout, p); err != nil {
panic(err)
}
fmt.Println()
}

这将输出您当前拥有的内容(在 Go Playground 上尝试):
{ "85c4c597bef9" : "addon_a0d7b954_nodered"}
{ "ec3c55af0497" : "addon_a0d7b954_appdaemon"}
{ "63e3081fbe42" : "addon_a0d7b954_logviewer"}

您可以使用 paste用逗号连接这些行,如下所示:
docker ps --format "{ \"{{.ID}}\" : \"{{.Names}}\"}" |paste -sd','

最后一件事:添加 [并附加一个 ]所以它变成了一个有效的 JSON 数组。

要将某些内容附加到命令的输出中,您可以使用
echo something | (command && cat)

省略由 echo 引起的换行符,您可以使用 echo -n .

因此,您的“希望”输出是一系列附加内容: ]docker 的输出,然后到单个 [ 的输出.

所以你的情况的解决方案:
echo ] | (docker ps --format "{ \"{{.ID}}\" : \"{{.Names}}\"}" | paste -sd',' && cat) | (echo [ && cat)

这将输出:
[
{ "85c4c597bef9" : "addon_a0d7b954_nodered"},{ "ec3c55af0497" : "addon_a0d7b954_appdaemon"},{ "63e3081fbe42" : "addon_a0d7b954_logviewer"}
]

关于json - 将 docker ps 输出格式化为 JSON 的 Golang 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61586686/

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