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

CSV转JSON时报错如何将reader_row[10]缺失值替换为Null

解决方法

核心思路:报错是因为CSV行第10列存在空值,直接调用int()转换空字符串会抛出异常。你可以通过安全类型转换函数处理缺失值,空值会返回Python的None,后续序列化为JSON时会自动转为标准的null值。

步骤1:定义安全转换函数

提前封装通用的类型转换逻辑,自动识别空值返回None:

# 安全转整数,空值返回None
def safe_int(val):
    val = val.strip()
    return int(val) if val else None

# 安全转浮点数,空值返回None
def safe_float(val):
    val = val.strip()
    return float(val) if val else None

# 安全转布尔值,空值返回None
def safe_bool(val):
    val = val.strip()
    return bool(val) if val else None

步骤2:替换原代码中的类型转换逻辑

把所有数值、布尔类型的转换替换为对应的安全函数,重点修改第10列的转换,其余可能存在缺失的字段也同步处理避免后续报错,修改后的完整代码如下:

import csv
import json

# 安全转换函数定义
def safe_int(val):
    val = val.strip()
    return int(val) if val else None

def safe_float(val):
    val = val.strip()
    return float(val) if val else None

def safe_bool(val):
    val = val.strip()
    return bool(val) if val else None

l = []

with open("data.csv", 'r') as data_file:
    reader = csv.reader(data_file)
    headers = next(reader)
    for reader_row in reader:
        d = {}
        d[headers[11]] = str(reader_row[11])
        d[headers[13]] = str(reader_row[13])
        d[headers[14]] = str(reader_row[14])
        d[headers[18]] = str(reader_row[18])
        d[headers[3]] = safe_int(reader_row[3])
        d[headers[16]] = safe_bool(reader_row[16])
        d[headers[4]] = safe_float(reader_row[4])
        d[headers[5]] = str(reader_row[5])
        d[headers[10]] = safe_int(reader_row[10]) 
        d[headers[17]] = safe_int(reader_row[17])
        d[headers[15]] = safe_int(reader_row[15])
        d[headers[0]]={'Address Street': str(reader_row[0]),
                       'Address City': str(reader_row[1]),
                       'Address Postcode': str(reader_row[2])
                       }
        d[headers[8]]={'Credit Card Number': str(reader_row[8]),
                       'Credit Card Start Date': str(reader_row[6]),
                       'Credit Card Expiry Date': str(reader_row[7]),
                       'Credit Card CVV': safe_int(reader_row[9]),
                       'Bank IBAN' : str(reader_row[12])
                       }
        d[headers[19]]={'Vehicle Make': str(reader_row[19]),
                        'Vehicle Model': str(reader_row[20]),
                        'Vehicle Year': safe_int(reader_row[21]),
                        'Vehicle Type': str(reader_row[22])
                        }
        l.append(d)

# 导出JSON时Python的None会自动转为JSON标准的null
with open("output.json", "w", encoding="utf-8") as f:
    json.dump(l, f, ensure_ascii=False, indent=2)

补充说明

  • 如果你的CSV缺失值不是空字符串,而是NA、N/A之类的自定义占位符,只要在安全转换函数里增加对应判断逻辑即可。
  • 如果不需要把字符串类型的空值转为null,保持原来的str()调用即可,空值会保留为空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:03