码头和格式json

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了码头和格式json相关的知识,希望对你有一定的参考价值。

我试图从docker cli获得可用的json,但是它似乎只会为单个项目生成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 API交谈可能更容易,它将直接为您提供JSON响应。例如,获取容器列表:

curl --unix-socket /var/run/docker.sock http://localhost/v1.24/containers/json

正如DazWilkin建议的那样,您可以使用jq在命令行上过滤JSON。例如,如果我们想要一个容器名称列表:

curl --unix-socket /var/run/docker.sock http://localhost/v1.24/containers/json |
jq '[.[]|.Names]'

您可以找到Docker API文档here

另一答案

或者你也可以尝试使用基于步行路径的unix实用程序jtc来jsonizing你的输出:

bash $ docker container ls -a --format="{{ json .Names }}" | jtc -J
[
   "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"
]
bash $ 

(注意我制作了示例cli,但输入来自您的样本)

以上是关于码头和格式json的主要内容,如果未能解决你的问题,请参考以下文章

哪个是码头最好的 json rpc 库?

golang的xorm如何将[]map[string][]byte 格式的数据序列化成json输出

Sphinx - 在代码块片段中使用省略号 (...)

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

如何在 Reactjs 中添加丰富的代码片段?

如何在 Javadoc 中使用 @ 和 符号格式化代码片段?