【问题标题】:Python - Writing parsed JSON to an CSVPython - 将解析的 JSON 写入 CSV
【发布时间】:2021-12-30 05:33:37
【问题描述】:

我正在编写一个脚本来从文件中读取 JSON,然后将某些内容提取到不同的表中。我能够从文件中读取并解析出书籍列表(在示例中)。问题是因为我正在写一个表,并不是每个列表都有相同的字段。我想在 JSON 中发送默认值。所以这是我拥有的 JSON。我想最终写 JSON

{
    "books": [
        {
            "field1": "value",
            "field2": "value",
            "field3": "value"
        },
        {
            "field1": "value",
            "field2": [
                "value"
            ],
            "field3": "value",
            "field4": "value"
        },
        {
            "field1": "value",
            "field2": "value",
            "field3": "value",
            "field4": "value",
            "field5": "value"
        }
    ]
}

我正在尝试将这些值写入 csv。我认为下一个中间步骤可能是具有如下所示的扁平结构。所以基本上是空字符串,然后我可以将其写入 CSV。如果有人有建议,我不清楚如何做到这一点。谢谢!

[
    {
        "field1": "value",
        "field2": "value",
        "field3": "value",
        "field4": "",
        "field5": ""
    },
    {
        "field1": "value",
        "field2": [
            "value"
        ],
        "field3": "value",
        "field4": "value",
        "field5": ""
    },
    {
        "field1": "value",
        "field2": "value",
        "field3": "value",
        "field4": "value",
        "field5": "value"
    }
]

【问题讨论】:

  • 请输入示例代码并展示您尝试过的内容。

标签: python json csv


【解决方案1】:

使用 Pandas 库更容易做到这一点。下面的示例代码

import numpy as np
import pandas as pd

d = {
    "books": [
        {
            "field1": "value",
            "field2": "value",
            "field3": "value"
        },
        {
            "field1": "value",
            "field2": [
                "value"
            ],
            "field3": "value",
            "field4": "value"
        },
        {
            "field1": "value",
            "field2": "value",
            "field3": "value",
            "field4": "value",
            "field5": "value"
        }
    ]
}

df = pd.DataFrame.from_dict(d['books'])
df.fillna("", inplace = True)
csv = df.to_csv(index = False)
print(csv)

【讨论】:

  • 非常感谢。这非常有帮助!
【解决方案2】:

您可以将默认值字典与数据字典合并,以生成默认值。请参阅下面的示例方法:

books: list = {
    "books": [
        {
            "field1": "value",
            "field2": "value",
            "field3": "value"
        },
        {
            "field1": "value",
            "field2": [
                "value"
            ],
            "field3": "value",
            "field4": "value"
        },
        {
            "field1": "value",
            "field2": "value",
            "field3": "value",
            "field4": "value",
            "field5": "value"
        }
    ]
}.get("books")

# find all keys and get a unique set
keys_list = []
[keys_list.extend(book.keys()) for book in books]
all_keys = set(keys_list)

# Generate a default dict
default = {key: "" for key in all_keys}

# Generate a list dicts with default merged values
flattened_list =[{**default, **book} for book in books]

#Write a CSV file
import csv
with open("books.csv", 'w') as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=all_keys)
    writer.writeheader()
    writer.writerows(flattened_list)

【讨论】:

  • CSV 编写器为第二本书的 field2 做了什么,它的值有一个列表?
猜你喜欢
  • 2013-12-23
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2016-08-16
  • 2013-10-20
  • 1970-01-01
相关资源
最近更新 更多