【发布时间】:2016-10-03 22:44:52
【问题描述】:
我的问题是关于在 golang 中解析 JSON 文件。
具体来说,我正在尝试解析命令“docker network inspect bridge”的输出,该命令恰好是 JSON 格式。该命令在此处进行了描述。我的目标是获取列出的容器的“IPv4Address”列表。
我尝试过这样做,但未能将 map[string]interface{} 转换为 map[string]string。我的代码在这里:- https://play.golang.org/p/eO_j996gGb
$ sudo docker network inspect bridge
[
{
"Name": "bridge",
"Id": "b2b1a2cba717161d984383fd68218cf70bbbd17d328496885f7c921333228b0f",
"Scope": "local",
"Driver": "bridge",
"IPAM": {
"Driver": "default",
"Config": [
{
"Subnet": "172.17.42.1/16",
"Gateway": "172.17.42.1"
}
]
},
"Internal": false,
"Containers": {
"bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727": {
"Name": "container2",
"EndpointID": "0aebb8fcd2b282abe1365979536f21ee4ceaf3ed56177c628eae9f706e00e019",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27": {
"Name": "container1",
"EndpointID": "a00676d9c91a96bbe5bcfb34f705387a33d7cc365bac1a29e4e9728df92d10ad",
"MacAddress": "02:42:ac:11:00:01",
"IPv4Address": "172.17.0.1/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
}
}
]
在 golang 中解析此类 JSON 文件的正确方法是什么。我确实尝试过使用类型转换,但没有帮助。我尝试了很多东西,但最终只能达到 sn-p 中显示的代码。如何从“cont”对象中提取 IPv4Address 字段?
我拥有的去游乐场 sn-p 的链接是 https://play.golang.org/p/eO_j996gGb。非常感谢任何帮助(愿意尝试一下,不仅需要代码,还需要想法 :) 谢谢。
【问题讨论】:
-
更多仅供参考:大多数 docker 命令接受
--format选项,该选项需要是 Golang 模板(来自text/template)包。