Вложенные JSON в CSV python (некоторые элементы не все поля) - PullRequest
0 голосов
/ 19 апреля 2020

У меня возникли проблемы, когда в объектах отсутствуют некоторые поля, поэтому мой CSV-файл не организован.

здесь предыдущий код, который работал, но CSV был испорчен:

import json
import csv

def get_tweets(item, key=None):
    if isinstance(item, dict):
        tweets = []
        for i in item.keys():
            tweets.extend(get_tweets(item[i], i))
        return tweets
    elif isinstance(item, list):
        tweets = []
        for i in item:
            tweets.extend(get_tweets(i, key))
        return tweets
    else:
        return [(key, str(item))]

with open('collected_tweets.json') as f_input, open('tweets_csvfile.csv', 'w', newline='') as f_output:
    csv_output = csv.writer(f_output)
    write_header = True

    for _ in f_input.readlines():
        tweet_entries = sorted(get_tweets(json.loads(_)))

        if write_header:
            csv_output.writerow([k for k, v in tweet_entries])
            write_header = False

        csv_output.writerow([v for k, v in tweet_entries])

Вот пример файла CSV: введите описание изображения здесь здесь это код, который я пытаюсь использовать сделать CSV организованы

import json import csv

def get_tweets(item, key=None):
    if isinstance(item, dict):
        tweets = []
        for i in item.keys():
            tweets.update(get_tweets(item[i], i))
        return tweets
    elif isinstance(item, list):
        tweets = []
        for i in item:
            tweets.update(get_tweets(i, key))
        return tweets
    else:
        return [key, item]

with open('collected_tweets.json') as f_input:
    json_data = json.load(f_input)

fieldnames = set()

for entry in json_data:
    fieldnames.update(get_tweets((entry).keys()))

with open('tweets_csvfile.csv', 'w', newline='') as f_output:
    csv_output = csv.DictWriter(f_output, fieldnames=sorted(fieldnames))
    csv_output.writeheader()
    csv_output.writerows(get_tweets(entry) for entry in json_data)

Любая помощь будет оценена

...