Python实现JSON转CSV:提取指定键值对时NaN问题修复求助
修复嵌套JSON提取字段错位问题并导出CSV
问题背景
有如下嵌套结构的JSON数据:
data = { "type": "video", "videoID": "vid001", "links": [ {"type": "video", "videoID": "vid002", "links": []}, {"type": "video", "videoID": "vid003", "links": [ {"type": "video", "videoID": "vid004"}, {"type": "video", "videoID": "vid005"}, ] }, {"type": "video", "videoID": "vid006"}, {"type": "video", "videoID": "vid007", "links": [ {"type": "video", "videoID": "vid008", "links": [ {"type": "video", "videoID": "vid009", "links": [{"type": "video", "videoID": "vid010"}] } ]} ]}, ] }
需要提取其中的videoID和type字段并转换为CSV文件,但原提取函数生成的DataFrame出现字段错位,部分行的videoID或type为NaN:
videoID type 0 vid001 NaN 1 NaN video 2 vid002 NaN 3 NaN video ...
期望得到每个videoID对应正确type的结果:
videoID type 0 vid001 video 1 vid002 video 2 vid003 video ...
解决方案
使用递归遍历嵌套JSON,每个节点同时提取videoID和type作为一行数据,再用pandas生成DataFrame并导出CSV:
import pandas as pd def extract_video_data(node, result_list): # 提取当前节点的videoID和type if "videoID" in node and "type" in node: result_list.append({ "videoID": node["videoID"], "type": node["type"] }) # 递归处理子节点 if "links" in node and isinstance(node["links"], list): for child in node["links"]: extract_video_data(child, result_list) # 初始化结果列表 video_list = [] extract_video_data(data, video_list) # 生成DataFrame并导出CSV df = pd.DataFrame(video_list) df.to_csv("video_data.csv", index=False)
说明
原代码出现错位的核心原因是:每次仅提取单个键值对(比如先取videoID再取type),导致一个节点对应两行数据。正确逻辑是每个节点一次性提取两个字段,将其封装为字典加入结果列表,确保每个节点对应DataFrame的一行,字段完全匹配。
运行上述代码后,生成的CSV文件会包含所有嵌套节点的videoID和type,且一一对应无错位。
内容的提问来源于stack exchange,提问作者Aks3
相关产品推荐
相关产品推荐

