我正在尝试从 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/