如何在python中处理可变大小的json文件来使用pandas创建DataFrame



我正在尝试使用pandas构建一个DataFrame,但当我拥有可变大小的JSON块时,我无法处理这种情况。

如:第一块:

{'ad': 0,
'country': 'US',
'ver': '1.0',
'adIdType': 2,
'adValue': '5',
'data': {'eventId': 99,
'clickId': '',
'eventType': 'PURCHASEMADE',
'tms': '2019-12-25T09:57:04+0000',
'productDetails': {'currency': 'DLR',
'productList': [
{'segment': 'Girls',
'vertical': 'Fashion Jewellery',
'brickname': 'Traditional Jewellery',
'price': 8,
'quantity': 10}]},
'transactionId': '1254'},
'appName': 'xer.tt',
'appId': 'XR',
'sdkVer': '1.0.0',
'language': 'en',
'tms': '2022-04-25T09:57:04+0000',
'tid': '124'}

块2:

{'ad': 0,
'country': 'US',
'ver': '1.0',
'adIdType': 2,
'adValue': '78',
'data': {'eventId': 7,
'clickId': '',
'eventType': 'PURCHASEMADE',
'tms': '20219-02-25T09:57:04+0000',
'productDetails': {'currency': 'DLR',
'productList': [{'segment': 'Boys',
'vertical': 'Fashion',
'brickname': 'Casuals',
'price': 10,
'quantity': 5},
{'segment': 'Girls',
'vertical': 'Fashion Jewellery',
'brickname': 'Traditional Jewellery',
'price': 8,
'quantity': 10}]},
'transactionId': '3258'},
'appName': 'xer.tt',
'appId': 'XR',
'sdkVer': '1.0.0',
'language': 'en',
'tms': '2029-02-25T09:57:04+0000',
'tid': '124'}

现在在ProductDetails中,产品的数量正在发生变化,在第一个数据块中,我们只有一个产品列表,它是详细的,但在第二个数据块中,我们有两个产品列表,它是详细的,对于进一步的数据块,我们也可以为其他数据块提供任意数量的产品。(即块~记录)

我试着写一些python脚本,但没有找到任何好的解决方案。

如果需要进一步的细节,请在评论中告诉我。

谢谢!

你能做的,就是使用pd.json_normalize,并拥有最多的" inner ";字典作为record_path,所有其他你感兴趣的数据作为meta。下面是一个如何构建它的深入示例:pandas.io.json。Json_normalize with very nested json

在你的例子中,这将是(对于单个对象):

df = pd.json_normalize(obj, 
record_path=["data", "productDetails", "productList"], 
meta=([
["data", "productDetails", "currency"],
["data", "transactionId"],
["data", "clickId"],
["data", "eventType"],
["data", "tms"],
"ad",
"country"
])
)

最新更新