You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Rest Assured从指定JSON响应中获取NetworkID

如何正确从Docker容器JSON响应中获取NetworkID?

首先,先确认你提供的JSON响应结构是正确的,NetworkID确实存在于指定路径中:

{
  "Image": "sha256:357a02cbb63175a797ea238665bd1cfe6210f0381670d7155b034a58020a65f5",
  "NetworkSettings": {
    "IPAddress": "172.17.0.6",
    "IPPrefixLen": 16,
    "Gateway": "172.17.0.1",
    "Bridge": "",
    "PortMapping": null,
    "Ports": {
      "80/tcp": [],
      "8082/tcp": []
    },
    "MacAddress": "02:42:ac:11:00:06",
    "Networks": {
      "bridge": {
        "Aliases": null,
        "NetworkID": "08a5829cf9c451ad09c28ce5c0ab09a192e7adf845563cec4f726572d91835be",
        "EndpointID": "7f8c27eaf162c95ca932b343739bb4e08dd5efb73aa2454db64618a9b62f417e",
        "Gateway": "172.17.0.1",
        "IPAddress": "172.17.0.6",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "MacAddress": "02:42:ac:11:00:06"
      }
    }
  }
}

你尝试的两种方法都没拿到正确的NetworkID,大概率是JSONPath语法细节或者解析库特性导致的,这里给你几个可行的解决方案:

方案1:修正JSONPath语法(添加根路径符号)

有些JSONPath实现(比如Rest Assured的JsonPath)需要明确指定根路径$,试试修改代码为:

String networkId = response.jsonPath().getString("$.NetworkSettings.Networks.bridge.NetworkID");

方案2:逐层解析JSON对象

如果直接用JSONPath深层取值有问题,可以尝试逐层获取嵌套对象,这样更容易排查哪一步出了问题:

// 先获取Networks对象
Map<String, Object> networks = response.jsonPath().getMap("NetworkSettings.Networks");
// 再获取bridge对应的网络对象
Map<String, Object> bridgeNetwork = (Map<String, Object>) networks.get("bridge");
// 最后提取NetworkID
String networkId = (String) bridgeNetwork.get("NetworkID");

方案3:使用POJO映射(最推荐)

对于复杂的JSON结构,创建对应的Java实体类来映射,不仅类型安全,还能避免路径拼写错误:

首先创建几个实体类:

public class ContainerResponse {
    private String Image;
    private NetworkSettings NetworkSettings;

    // Getters and Setters
    public String getImage() { return Image; }
    public void setImage(String image) { Image = image; }
    public NetworkSettings getNetworkSettings() { return NetworkSettings; }
    public void setNetworkSettings(NetworkSettings networkSettings) { NetworkSettings = networkSettings; }
}

public class NetworkSettings {
    private String IPAddress;
    private int IPPrefixLen;
    private String Gateway;
    private String Bridge;
    private Object PortMapping;
    private Map<String, List<Object>> Ports;
    private String MacAddress;
    private Map<String, Network> Networks;

    // Getters and Setters
    public Map<String, Network> getNetworks() { return Networks; }
    public void setNetworks(Map<String, Network> networks) { Networks = networks; }
    // 其他字段的getter/setter按需添加
}

public class Network {
    private String NetworkID;
    private String EndpointID;
    private String Gateway;
    // 其他字段的getter/setter按需添加

    public String getNetworkID() { return NetworkID; }
    public void setNetworkID(String networkID) { NetworkID = networkID; }
}

然后用实体类解析响应:

ContainerResponse container = response.as(ContainerResponse.class);
String networkId = container.getNetworkSettings().getNetworks().get("bridge").getNetworkID();

这样就能稳定获取到NetworkID了。

内容的提问来源于stack exchange,提问作者Arun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:20:29