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

Jupyter导入自定义JSON转CSV模块找不到json_to_dataframe属性如何解决

报错根因

  • 方法归属错误:json_to_dataframe是定义在JsonCsvConverter类内部的方法,不属于JsonTransformer模块的顶层属性,直接调用JsonTransformer.json_to_dataframe无法命中
  • 代码存在语法错误:你提供的原始代码存在缩进错误、无效代码片段、类方法调用逻辑缺失的问题
  • Jupyter模块缓存问题:Jupyter默认不会自动重载修改后的本地模块,导入的还是旧版本的模块内容

解决步骤

1. 修正JsonTransformer.py代码

替换原文件内容为修正后的版本,补全缺失逻辑、添加静态方法装饰器、暴露方法到模块顶层:

import pandas as pd
import json
from copy import deepcopy

class JsonCsvConverter:
    @staticmethod
    def cross_join(left, right):
        new_rows = [] if right else left
        for left_row in left:
            for right_row in right:
                temp_row = deepcopy(left_row)
                for key, value in right_row.items():
                    temp_row[key] = value
                new_rows.append(temp_row)
        return new_rows

    @staticmethod
    def flatten_list(data):
        for elem in data:
            if isinstance(elem, list):
                yield from JsonCsvConverter.flatten_list(elem)
            else:
                yield elem

    @staticmethod
    def json_to_dataframe(data_in):
        def flatten_json(data, prev_heading=''):
            if isinstance(data, dict):
                rows = [{}]
                for key, value in data.items():
                    rows = JsonCsvConverter.cross_join(rows, flatten_json(value, prev_heading + '.' + key))
            elif isinstance(data, list):
                rows = []
                for i in range(len(data)):
                    [rows.append(elem) for elem in JsonCsvConverter.flatten_list(flatten_json(data[i], prev_heading))]
            else:
                rows = [{prev_heading[1:]: data}]
            return rows
        return pd.DataFrame(flatten_json(data_in))

# 将方法暴露到模块顶层,支持直接通过模块调用
json_to_dataframe = JsonCsvConverter.json_to_dataframe

if __name__ == '__main__':
    with open('cnntv_json') as json_file:
        json_data = json.load(json_file)
    df = json_to_dataframe(json_data)
    df.to_csv('cnntv.csv', mode='w')

2. 正确导入调用

在新的Jupyter Notebook中使用以下两种方式任意一种调用即可:

  • 直接调用模块暴露的顶层方法:
import JsonTransformer
df = JsonTransformer.json_to_dataframe(json_data)
  • 导入类后调用类静态方法:
from JsonTransformer import JsonCsvConverter
df = JsonCsvConverter.json_to_dataframe(json_data)

3. 解决模块缓存问题

如果修改代码后仍然报错,执行以下命令重载模块即可刷新缓存:

import importlib
import JsonTransformer
importlib.reload(JsonTransformer)

内容的提问来源于stack exchange,提问作者Ömer Fedai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:36:03