← 返回博客

如何将 JSON 转换为 Excel(反之亦然)

学习如何将 JSON 转换为 Excel 文件。涵盖在线工具、Python pandas、JavaScript 库和自动化转换方法。

Big JSON Team11 分钟阅读tools
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

11 分钟阅读

# 如何将 JSON 转换为 Excel(反之亦然)

JSON 和 Excel 是两种最常用的数据格式。本综合指南将向您展示使用在线工具、Python、JavaScript 等在它们之间转换的每种方法。

为什么转换 JSON 到 Excel?

用例

  • 📊 数据分析:在 Excel 中分析 API 数据
  • 👥 团队协作:与非技术用户共享数据
  • 📈 可视化:创建图表和数据透视表
  • 📁 报告:生成业务报告
  • 🔄 数据迁移:在系统之间传输数据

优势

  • ✅ Excel 被广泛使用和理解
  • ✅ 强大的数据分析功能
  • ✅ 易于与团队共享
  • ✅ 支持格式化和公式
  • ✅ 无需编程知识

在线转换器

Big JSON Viewer

最佳综合工具 步骤:
  • 访问 bigjson.online
  • 上传或粘贴 JSON 文件
  • 点击"导出到 Excel"
  • 下载 XLSX 文件
  • 功能:
    • ✅ 处理大文件(100MB+)
    • ✅ 保留数据类型
    • ✅ 处理嵌套结构
    • ✅ 免费使用

    ConvertCSV.com

    步骤:
  • 访问 convertcsv.com
  • 选择"JSON 到 Excel"
  • 粘贴 JSON 或上传文件
  • 点击"转换"
  • 下载 XLSX
  • JSON-Excel-CSV

    特点:
    • 批量转换
    • 自定义分隔符
    • 多工作表支持

    Code Beautify

    快速简单:
  • 访问 codebeautify.org/json-to-excel-converter
  • 粘贴 JSON
  • 点击"JSON 到 Excel"
  • 下载文件
  • Python 与 Pandas

    基本安装

    pip install pandas openpyxl

    简单转换

    import pandas as pd
    

    import json

    # 从文件加载 JSON

    with open('data.json', 'r', encoding='utf-8') as f:

    data = json.load(f)

    # 转换为 DataFrame

    df = pd.DataFrame(data)

    # 保存到 Excel

    df.to_excel('output.xlsx', index=False, engine='openpyxl')

    print("转换完成!")

    处理嵌套 JSON

    import pandas as pd
    

    import json

    # 加载嵌套 JSON

    with open('nested.json', 'r', encoding='utf-8') as f:

    data = json.load(f)

    # 展平嵌套结构

    df = pd.json_normalize(data, sep='_')

    # 保存到 Excel

    df.to_excel('flattened.xlsx', index=False)

    示例数据:
    [
    

    {

    "name": "张三",

    "age": 30,

    "address": {

    "city": "北京",

    "district": "朝阳"

    }

    }

    ]

    输出列:
    • name
    • age
    • address_city
    • address_district

    多工作表

    import pandas as pd
    
    

    # 准备数据

    users_df = pd.DataFrame([

    {"name": "张三", "age": 30},

    {"name": "李四", "age": 25}

    ])

    orders_df = pd.DataFrame([

    {"order_id": 1, "amount": 100},

    {"order_id": 2, "amount": 200}

    ])

    # 写入多个工作表

    with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer:

    users_df.to_excel(writer, sheet_name='用户', index=False)

    orders_df.to_excel(writer, sheet_name='订单', index=False)

    print("多工作表 Excel 已创建!")

    高级格式化

    import pandas as pd
    

    from openpyxl import load_workbook

    from openpyxl.styles import Font, PatternFill

    # 创建 Excel

    df.to_excel('styled.xlsx', index=False)

    # 加载并应用样式

    wb = load_workbook('styled.xlsx')

    ws = wb.active

    # 标题样式

    header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")

    header_font = Font(color="FFFFFF", bold=True)

    for cell in ws[1]:

    cell.fill = header_fill

    cell.font = header_font

    # 保存

    wb.save('styled.xlsx')

    处理大型 JSON

    import pandas as pd
    

    import json

    def convert_large_json(input_file, output_file, chunksize=1000):

    """分块转换大型 JSON 文件"""

    with open(input_file, 'r', encoding='utf-8') as f:

    data = json.load(f)

    # 分块处理

    total_rows = len(data)

    with pd.ExcelWriter(output_file, engine='openpyxl') as writer:

    for i in range(0, total_rows, chunksize):

    chunk = data[i:i + chunksize]

    df = pd.DataFrame(chunk)

    # 附加到同一工作表

    if i == 0:

    df.to_excel(writer, sheet_name='数据', index=False)

    else:

    df.to_excel(writer, sheet_name='数据',

    index=False, header=False,

    startrow=i+1)

    print(f"已转换 {total_rows} 行")

    # 使用

    convert_large_json('large_data.json', 'output.xlsx')

    JavaScript/Node.js

    使用 xlsx 库

    安装:
    npm install xlsx
    基本转换:
    const XLSX = require('xlsx');
    

    const fs = require('fs');

    // 读取 JSON

    const jsonData = JSON.parse(fs.readFileSync('data.json', 'utf8'));

    // 转换为工作表

    const worksheet = XLSX.utils.json_to_sheet(jsonData);

    // 创建工作簿

    const workbook = XLSX.utils.book_new();

    XLSX.utils.book_append_sheet(workbook, worksheet, '数据');

    // 写入文件

    XLSX.writeFile(workbook, 'output.xlsx');

    console.log('Excel 文件已创建!');

    自定义列标题

    const XLSX = require('xlsx');
    
    

    const data = [

    { name: "张三", age: 30, city: "北京" },

    { name: "李四", age: 25, city: "上海" }

    ];

    // 自定义标题

    const worksheet = XLSX.utils.json_to_sheet(data, {

    header: ["姓名", "年龄", "城市"]

    });

    const workbook = XLSX.utils.book_new();

    XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');

    XLSX.writeFile(workbook, 'custom_headers.xlsx');

    多工作表

    const XLSX = require('xlsx');
    
    

    const users = [

    { name: "张三", age: 30 },

    { name: "李四", age: 25 }

    ];

    const orders = [

    { orderId: 1, amount: 100 },

    { orderId: 2, amount: 200 }

    ];

    const workbook = XLSX.utils.book_new();

    const usersSheet = XLSX.utils.json_to_sheet(users);

    const ordersSheet = XLSX.utils.json_to_sheet(orders);

    XLSX.utils.book_append_sheet(workbook, usersSheet, '用户');

    XLSX.utils.book_append_sheet(workbook, ordersSheet, '订单');

    XLSX.writeFile(workbook, 'multi_sheet.xlsx');

    处理嵌套对象

    const XLSX = require('xlsx');
    
    

    const data = [

    {

    name: "张三",

    address: {

    city: "北京",

    district: "朝阳"

    }

    }

    ];

    // 展平对象

    const flattened = data.map(item => ({

    name: item.name,

    city: item.address.city,

    district: item.address.district

    }));

    const worksheet = XLSX.utils.json_to_sheet(flattened);

    const workbook = XLSX.utils.book_new();

    XLSX.utils.book_append_sheet(workbook, worksheet, '数据');

    XLSX.writeFile(workbook, 'flattened.xlsx');

    Excel 到 JSON

    Python (Pandas)

    import pandas as pd
    

    import json

    # 读取 Excel

    df = pd.read_excel('input.xlsx', engine='openpyxl')

    # 转换为 JSON

    json_data = df.to_dict('records')

    # 保存到文件

    with open('output.json', 'w', encoding='utf-8') as f:

    json.dump(json_data, f, ensure_ascii=False, indent=2)

    # 或直接获取 JSON 字符串

    json_string = df.to_json(orient='records', force_ascii=False, indent=2)

    print(json_string)

    JavaScript (xlsx)

    const XLSX = require('xlsx');
    

    const fs = require('fs');

    // 读取 Excel

    const workbook = XLSX.readFile('input.xlsx');

    const sheetName = workbook.SheetNames[0];

    const worksheet = workbook.Sheets[sheetName];

    // 转换为 JSON

    const jsonData = XLSX.utils.sheet_to_json(worksheet);

    // 保存到文件

    fs.writeFileSync('output.json', JSON.stringify(jsonData, null, 2));

    console.log('JSON 文件已创建!');

    读取多个工作表

    import pandas as pd
    

    import json

    # 读取所有工作表

    excel_file = pd.ExcelFile('input.xlsx')

    result = {}

    for sheet_name in excel_file.sheet_names:

    df = pd.read_excel(excel_file, sheet_name=sheet_name)

    result[sheet_name] = df.to_dict('records')

    # 保存

    with open('all_sheets.json', 'w', encoding='utf-8') as f:

    json.dump(result, f, ensure_ascii=False, indent=2)

    命令行工具

    使用 jq 和 csvkit

    安装:
    # macOS
    

    brew install jq csvkit

    # Ubuntu

    sudo apt-get install jq csvkit

    # Windows (Scoop)

    scoop install jq csvkit

    JSON 到 CSV:
    jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[ $keys[] ]])[] | @csv' data.json > output.csv
    CSV 到 Excel(使用 Python):
    python -c "import pandas as pd; pd.read_csv('input.csv').to_excel('output.xlsx', index=False)"

    实际示例

    示例 1:API 响应到 Excel

    import requests
    

    import pandas as pd

    # 从 API 获取数据

    response = requests.get('https://api.example.com/users')

    data = response.json()

    # 转换为 Excel

    df = pd.DataFrame(data['users'])

    df.to_excel('api_users.xlsx', index=False)

    示例 2:GitHub 仓库数据

    import requests
    

    import pandas as pd

    # 获取 GitHub 仓库

    response = requests.get('https://api.github.com/users/microsoft/repos')

    repos = response.json()

    # 提取相关字段

    data = [{

    '名称': repo['name'],

    '星标': repo['stargazers_count'],

    '语言': repo['language'],

    '描述': repo['description']

    } for repo in repos]

    # 保存到 Excel

    df = pd.DataFrame(data)

    df.to_excel('github_repos.xlsx', index=False)

    示例 3:嵌套电商数据

    import pandas as pd
    

    import json

    # 复杂的嵌套 JSON

    data = {

    "order_id": "ORD123",

    "customer": {

    "name": "张三",

    "email": "zhangsan@example.com"

    },

    "items": [

    {"product": "笔记本电脑", "price": 5999, "qty": 1},

    {"product": "鼠标", "price": 99, "qty": 2}

    ]

    }

    # 展平订单

    order_info = {

    "订单ID": data["order_id"],

    "客户姓名": data["customer"]["name"],

    "客户邮箱": data["customer"]["email"]

    }

    # 展平商品

    items_df = pd.DataFrame(data["items"])

    items_df = items_df.rename(columns={

    "product": "产品",

    "price": "价格",

    "qty": "数量"

    })

    # 添加订单信息到每个商品

    for key, value in order_info.items():

    items_df[key] = value

    # 保存

    items_df.to_excel('orders.xlsx', index=False)

    最佳实践

    1. 处理缺失值

    import pandas as pd
    

    import json

    # 处理 null/None 值

    df = pd.DataFrame(data)

    df = df.fillna('') # 或使用其他默认值

    df.to_excel('output.xlsx', index=False)

    2. 数据类型保留

    # 保留数据类型
    

    df.to_excel('output.xlsx', index=False)

    # 读取时指定类型

    df = pd.read_excel('input.xlsx', dtype={'phone': str})

    3. 大文件优化

    # 使用分块
    

    chunk_size = 10000

    for chunk in pd.read_json('large.json', lines=True, chunksize=chunk_size):

    # 处理每个块

    process_chunk(chunk)

    4. 错误处理

    import pandas as pd
    

    import json

    def safe_convert(input_file, output_file):

    try:

    with open(input_file, 'r', encoding='utf-8') as f:

    data = json.load(f)

    df = pd.DataFrame(data)

    df.to_excel(output_file, index=False)

    print(f"成功转换为 {output_file}")

    return True

    except json.JSONDecodeError:

    print("错误:无效的 JSON 文件")

    except Exception as e:

    print(f"错误:{e}")

    return False

    # 使用

    safe_convert('data.json', 'output.xlsx')

    工具比较

    | 方法 | 优势 | 劣势 | 最适合 |

    |------|------|------|--------|

    | 在线工具 | 简单、无需代码 | 文件大小限制、隐私问题 | 小文件、快速任务 |

    | Python Pandas | 强大、灵活 | 需要 Python | 大文件、自动化 |

    | JavaScript xlsx | Node.js 集成 | 需要 Node.js | Web 应用 |

    | 命令行 | 脚本化、快速 | 学习曲线 | 自动化、批处理 |

    故障排除

    问题:编码错误

    # 解决方案:指定编码
    

    with open('data.json', 'r', encoding='utf-8') as f:

    data = json.load(f)

    df.to_excel('output.xlsx', index=False, engine='openpyxl')

    问题:嵌套结构

    # 使用 json_normalize
    

    df = pd.json_normalize(data, sep='_')

    问题:Excel 限制

    Excel 限制:

    • 最大行数:1,048,576
    • 最大列数:16,384

    # 检查大小
    

    if len(df) > 1048576:

    # 分割为多个文件

    chunk_size = 1000000

    for i, chunk in enumerate(np.array_split(df, len(df)//chunk_size + 1)):

    chunk.to_excel(f'output_part_{i}.xlsx', index=False)

    结论

    在 JSON 和 Excel 之间转换数据对于数据分析和协作至关重要。通过掌握这些工具和技术,您可以:

    • ✅ 快速转换小文件(在线工具)
    • ✅ 自动化大规模转换(Python/JavaScript)
    • ✅ 处理复杂的嵌套结构
    • ✅ 保持数据完整性
    • ✅ 为不同受众格式化数据

    推荐

    快速一次性转换:

    → 使用在线工具(Big JSON Viewer)

    自动化/脚本:

    → 使用 Python Pandas

    Web 应用:

    → 使用 JavaScript xlsx

    批处理:

    → 使用命令行工具

    选择最适合您需求的方法,并始终在敏感数据时考虑隐私和安全性!

    Share:

    相关文章

    Read in English