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

Python从CSV多值列构建JSON数组,实现Cisco DNAC IP池自动创建

解决CSV多值字段转JSON数组的问题

核心问题分析

CSV读取时,逗号分隔的多值字段会被识别为单个字符串,而DNAC API要求这类字段以JSON数组格式提交,所以需要在读取CSV后,对指定字段做字符串分割+去空格处理,将字符串转换为数组。

具体实现步骤(以Python为例)

假设你使用csv模块读取CSV、json模块构造请求体,修改读取逻辑如下:

1. 定义需要转数组的字段列表

先明确哪些字段需要从逗号分隔字符串转为数组:

# 指定需要转换为数组的目标字段
array_fields = ["ipv4DhcpServers", "ipv4DnsServers"]

2. 读取CSV时处理多值字段

遍历CSV每一行数据,对指定字段进行分割处理:

import csv
import json

# 读取CSV文件
with open("ip_pools.csv", "r") as csv_file:
    reader = csv.DictReader(csv_file)
    for row in reader:
        # 批量处理多值字段
        for field in array_fields:
            if row.get(field):  # 检查字段是否存在有效值
                # 按逗号分割字符串,同时去除每个元素前后的空格
                row[field] = [item.strip() for item in row[field].split(",")]
        
        # 构造符合DNAC要求的JSON请求体
        dnac_payload = {
            "name": row["name"],
            "ipPoolCidr": row["ipPoolCidr"],
            "ipv4DhcpServers": row["ipv4DhcpServers"],
            "ipv4DnsServers": row["ipv4DnsServers"],
            # 单值字段直接读取使用
            "gateway": row["gateway"],
            "netmask": row["netmask"]
        }
        
        # 此处可添加提交至DNAC API的代码
        print(json.dumps(dnac_payload, indent=2))  # 打印验证JSON格式是否正确

3. 正确的CSV示例格式

确保CSV中多值字段仅用逗号分隔(无需额外加引号,除非值本身包含逗号):

name,ipPoolCidr,ipv4DhcpServers,ipv4DnsServers,gateway,netmask
Office-Pool,192.168.1.0/24,192.168.1.10,8.8.8.8,192.168.1.1,255.255.255.0
Lab-Pool,10.0.0.0/24,10.0.0.10,10.0.0.11,10.0.0.1,255.255.255.0

关键注意事项

  • 如果多值字段的元素本身包含逗号(比如带描述的内容),需用双引号包裹该字段(例如"server1, dc1, server2, dc2"),此时csv.DictReader会自动识别为单个字符串,分割时需注意逻辑适配(但IP类字段一般不会出现这种情况)。
  • 若字段为空,分割后会得到空数组,需根据DNAC API的要求决定是否保留或设为None。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:54:16