当我发出以下命令
docker ps --no-trunc --format '{"name":"{{.Names}}", "status":"{{.Status}}"}'
得到如下输出:
{"name": "container1", "status": "Up 10 hours"}
{"name": "container2", "status": "Up 10 hours"}
每一行都是一个有效的JSON对象,但我很懒,希望整个输出是一个代表字典列表的有效JSON:
[
{"name": "container1", "status": "Up 10 hours"},
{"name": "container2", "status": "Up 10 hours"}
]
是否有办法让docker ps
命令以该格式输出?
最简单的方法是管道到jq -s
:
docker ps --no-trunc --format '{"name":"{{.Names}}", "status":"{{.Status}}"}'
| jq -s
Fromjq --help
:
-s read (slurp) all inputs into an array; apply filter to it;
PS:如果您无论如何都要使用jq
,那么我建议使用以下命令:
docker ps --no-trunc --format '{{ json . }}'
| jq -s 'map({name:.Names,status:.Status})'
该命令将json序列化留给Go模板函数json
,而不是像您的示例中那样手动执行。这样做的好处是,容器名称中有问题的字符(例如unicode)不会破坏json输出。