簡體   English   中英

在python中將復雜的json文件轉換為csv

[英]complex json file to csv in python

我需要使用python將復雜的json文件轉換為csv,我嘗試了很多代碼都沒有成功,我來這里尋求幫助,我更新了問題,json文件大約一百萬,我需要將它們轉換為csv格式

.csv 文件

{
    "_id": {
        "$oid": "2e3230"
    },
    "add": {
        "address1": {
            "address": "kvartira 14",
            "zipcode": "10005",
        },
        "name": "Evgiya Kovava",
        "address2": {
            "country": "US",
            "country_name": "NY",
        }
    }
}
{
    "_id": {
        "$oid": "2d118c8bo"
    },
    "add": {
        "address1": {
            "address": "kvartira 14",
            "zipcode": "52805",
        },
        "name": "Eiya tceva",
        "address2": {
            "country": "US",
            "country_name": "TX",
        }
    }
}

import pandas as pd

null = 'null'

data = {
    "_id": {
        "$oid": "2e3230s314i5dc07e118c8bo"
    },
    "add": {
        "address": {
            "address_type": "Door",
            "address": "kvartira 14",
            "city": "new york",
            "region": null,
            "zipcode": "10005",
        },
        "name": "Evgeniya Kovantceva",
        "type": "Private person",
        "code": null,
        "additional_phone_nums": null,
        "email": null,
        "notifications": [],
        "address": {
            "address": "kvartira 14",
            "city": "new york",
            "region": null,
            "zipcode": "10005",
            "country": "US",
            "country_name": "NY",
        }
    }
}

df = pd.json_normalize(data)
df.to_csv('yourpath.csv')

注意空值。 “地址”嵌套字典在“添加”中兩次幾乎相同?

編輯

好的,在您提供信息之后,您需要的是 json.JSONDecoder() 。

最初由@pschill 在此鏈接上發布: 如何分析不以逗號分隔的 json 對象(最好在 Python 中)

我在您的數據上嘗試了他的代碼:

import json 
import pandas as pd

data = """{
    "_id": {
        "$oid": "2e3230"
    },
    "add": {
        "address1": {
            "address": "kvartira 14",
            "zipcode": "10005"
        },
        "name": "Evgiya Kovava",
        "address2": {
            "country": "US",
            "country_name": "NY"
        }
    }
}
{
    "_id": {
        "$oid": "2d118c8bo"
    },
    "add": {
        "address1": {
            "address": "kvartira 14",
            "zipcode": "52805"
        },
        "name": "Eiya tceva",
        "address2": {
            "country": "US",
            "country_name": "TX"
        }
    }
}"""

請記住,您的數據也有尾隨逗號,這使數據不可讀(每個右括號之前的最后一個逗號)。

您必須使用一些正則表達式或我不熟悉的其他方法來刪除它們。 出於此答案的目的,我手動刪除了它們。

所以在那之后我嘗試了這個:

content = data
parsed_values = []
decoder = json.JSONDecoder()
while content:
    value, new_start = decoder.raw_decode(content)
    content = content[new_start:].strip()
    # You can handle the value directly in this loop:
    # print("Parsed:", value)
    # Or you can store it in a container and use it later:
    parsed_values.append(value)

這給了我一個錯誤,但列表似乎填充了所有值:

parsed_values
[{'_id': {'$oid': '2e3230'},
  'add': {'address1': {'address': 'kvartira 14', 'zipcode': '10005'},
   'name': 'Evgiya Kovava',
   'address2': {'country': 'US', 'country_name': 'NY'}}},
 {'_id': {'$oid': '2d118c8bo'},
  'add': {'address1': {'address': 'kvartira 14', 'zipcode': '52805'},
   'name': 'Eiya tceva',
   'address2': {'country': 'US', 'country_name': 'TX'}}}]

接下來我做了:

df = pd.json_normalize(parsed_values)

效果很好。 您可以隨時將其保存到 csv 中:

df.to_csv('yourpath.csv')

告訴我這是否有幫助。

畢竟你的 json 是很成問題的。 重復的鍵(問題),空值(不可讀),尾隨逗號(不可讀),不是逗號分隔的字典......一開始並沒有引起注意:P

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM