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

Python解析JSON遇TypeError: write()参数需str而非None的求助

问题分析与解决方案

核心问题拆解

你的代码存在多个导致报错和功能失效的问题:

  • 未导入json模块,代码运行会直接抛出NameError
  • output、locationJSON变量未定义,无法指定文件路径
  • json.dumps(key)会给输入的key额外添加引号(比如输入name会变成"name"),导致data.get()找不到对应键,返回None,触发write()参数类型错误
  • 未循环处理输入的多个keys,仅处理单个key
  • 写入格式不符合目标数组结构,且未处理嵌套JSON的键提取

修正后的完整代码

import json
import csv

# 定义文件路径(替换为你的实际路径)
locationJSON = "input.json"
output_json = "extracted_data.json"
output_csv = "extracted_data.csv"

# 获取要提取的键,支持嵌套键(用点分隔,比如"user.profile.name")
keys = [k.strip() for k in input('Enter the keys you want to extract separated by commas: ').split(',')]

def get_nested_value(data, key_path):
    """从嵌套JSON中提取指定路径的值"""
    keys = key_path.split('.')
    current = data
    for k in keys:
        if isinstance(current, dict) and k in current:
            current = current[k]
        else:
            return None
    return current

# 读取原始JSON数据
with open(locationJSON, "r") as fi:
    data = json.load(fi)

# 收集提取的键值对,生成目标格式的列表
extracted_list = []
for key in keys:
    value = get_nested_value(data, key)
    # 仅添加存在的键值对,避免None值
    if value is not None:
        extracted_list.append({key: value})

# 写入JSON文件
with open(output_json, "w") as f:
    json.dump(extracted_list, f, indent=2)

# 转CSV文件
if extracted_list:
    with open(output_csv, "w", newline='') as csvfile:
        fieldnames = extracted_list[0].keys()
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(extracted_list)

关键改进说明

  • 嵌套键支持:新增get_nested_value函数,通过点分隔的路径(如user.address.city)提取多层嵌套的JSON值
  • 错误避免:跳过不存在的键(返回None时不加入结果),避免写入空值导致的报错
  • 格式合规:直接用json.dump生成标准的数组格式JSON,无需手动拼接字符串
  • CSV转换:自动将提取的JSON数组转为CSV,方便数据分析
  • 变量定义:明确指定输入输出文件路径,避免未定义错误

测试说明

  1. 替换locationJSON为你的原始JSON文件路径
  2. 运行代码后输入要提取的键,比如id,name,user.email
  3. 生成的extracted_data.json会严格符合你期望的数组格式,extracted_data.csv可直接用于数据分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:48:29