有什么简单的方法可以将jsonb字段转换为csv吗?

问题描述 投票:0回答:1

我有一个带有 jsonb 字段的模型,其中存储来自第三方服务的响应。响应周期性变化;有些字段被添加,有些字段消失。我想从记录样本生成 CSV。为此,我需要从示例中收集所有可能的字段并将它们转换为 CSV 文件中的列。

ruby-on-rails ruby postgresql csv jsonb
1个回答
0
投票

为此,您需要迭代示例记录,从 JSONB 字段中提取所有唯一键,然后使用这些键在 CSV 文件中创建列。以下是您可以在 Python 中遵循的分步方法:

    import json
    import csv
    from collections import defaultdict

    # Sample records with JSONB field
    sample_records = [
        {"id": 1, "data": {"key1": "value1", "key2": "value2"}},
        {"id": 2, "data": {"key2": "value2", "key3": "value3"}},
        {"id": 3, "data": {"key1": "value1", "key4": "value4"}}
    ]

    # Extract all unique keys from the JSONB field
    all_keys = set()
    for record in sample_records:
        data = record.get("data", {})
        all_keys.update(data.keys())

    # Create CSV file and write header
    with open('output.csv', 'w', newline='') as csvfile:
        fieldnames = ['id'] + list(all_keys)  # Include 'id' column and unique keys
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()

        # Write data rows
        for record in sample_records:
            row = {'id': record['id']}
            data = record.get("data", {})
            row.update(data)  # Add data fields
            writer.writerow(row)

    print("CSV file generated successfully.")

此脚本迭代示例中的每条记录,从 JSONB 字段中提取键,并更新包含所有唯一键的集合。然后,它创建一个 CSV 文件,并使用“id”列和所有唯一键作为列名称写入标题。最后,它再次迭代示例记录,将每条记录写入 CSV 文件,并为每列提供相应的值。

您可以将sample_records替换为从数据库中检索到的实际样本数据。此外,请确保根据您的具体要求和数据的性质处理任何潜在的错误或边缘情况。

© www.soinside.com 2019 - 2024. All rights reserved.