json - docker 和 json 格式

标签 json bash docker

我正在尝试从 docker 中获取可用的 json cli,但是它似乎只会为单个项目生成 json,而不是整个结果。

例如,运行 docker container ls -a --format="{{ json .Names }}"产生:

"hopeful_payne"
"trusting_turing"
"stupefied_morse"
"unruffled_noyce"
"pensive_fermi"
"objective_neumann"
"confident_bhaskara"
"unruffled_cray"
"epic_newton"
"boring_bartik"
"priceless_sinoussi"
"naughty_grothendieck"
"hardcore_bose"
"sad_jones"
"optimistic_napier"
"trusting_stallman"
"xenodochial_dijkstra"
"pedantic_cocks"

以上不是json。

我怎样才能产生一个理想的结果,即一个 json 数组?

最佳答案

我认为你不能只使用 docker 来做到这一点。

命令行的 format函数有效地获取每个输入行(每个容器一个)并将 Go 模板应用于它。因此,您需要另一个工具将这些行聚合到一个 JSON 数组中。

实现目标的一种方法是使用出色的 jq 工具:

docker container ls --format="{\"name\":\"{{.Names}}\"}" --all | jq --slurp

这会将每个容器行生成为 JSON 字符串:{"name": "[VALUE]"}然后使用 jq将它们放入一个 JSON 数组中。

直接在 bash 中执行此操作的一个挑战是 JSON 的限制,即列表中的最后一个元素不能以 , 结尾。 .因此,以下简单的 bash 脚本生成无效的 JSON,您需要额外的逻辑来删除它(或者更好的是,不要添加最后一个):

echo "[$(for CONTAINER in $(docker container ls --format="{{.Names}}" --all); do echo "{\"name\":\"${CONTAINER}\"},"; done;)]"

关于json - docker 和 json 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55583208/

相关文章:

docker - Traefik 没有显示 IP 地址

javascript - 在 Laravel Blade 模板中使用 JS/JQuery 时搜索栏过滤器的问题

php - 对包含 SQL 查询数据的表中的非 SQL 表列进行排序

json - 如果用户更新个人资料图像,则更新 JSON 中的键值

macos - 如何将 .txt 文件的内容写入 Mac 上的系统日志中?

java - 如何在 Docker 上的 WebSphere 上运行特定配置文件?

ruby-on-rails - Rails 不记录请求

java - 难道这个检查正确响应的Java Json(Gson)代码是不是太多余了?

Git Checkout 与 git bash 一起无限期挂起。怎么解决?

bash - 从 shell 脚本检查目录是否包含文件