【问题标题】:Real JSON nested dictionaries Get dict with Python / pandas真正的 JSON 嵌套字典 使用 Python / pandas 获取字典
【发布时间】:2021-08-31 15:16:10
【问题描述】:

我陷入了一个肮脏的嵌套 json。 任何人都可以找到在“extra_data”>“additional_value”中规范化 de dic 的方法?
或者只是从里面取出一列new_value整数:sudor:

{"old_value":9500,"new_value":8800,"currency":"ARS","type":"payment_amount"}
{
    "data": [
        {
            "object_id": "23843009595880561",
            "event_time": "2019-08-08T13:38:44+0000",
            "extra_data": '{"old_value":"BID_CAP","new_value":"BID_CAP","additional_value": {"old_value":9500,"new_value":8800,"currency":"ARS","type":"payment_amount"}, "adset_minimum_return_on_ad_spend":{"old_value":null,"new_value":null},"type":"bid_type"}',
            "object_name": "LK 17 - 50 - Eventos PX - 1%",
        },
        # ....
    ]
}

【问题讨论】:

  • 也许使用模块json 来转换它——比如json.loads( item["data"][0]["extra_data"] )。如果您有更多元素,请使用它for-loop

标签: python json pandas dictionary nested


【解决方案1】:

只需使用模块json 转换即可。

items = {
    "data": [
        {
            "object_id": "23843009595880561",
            "event_time": "2019-08-08T13:38:44+0000",
            "extra_data": '{"old_value":"BID_CAP","new_value":"BID_CAP","additional_value": {"old_value":9500,"new_value":8800,"currency":"ARS","type":"payment_amount"}, "adset_minimum_return_on_ad_spend":{"old_value":null,"new_value":null},"type":"bid_type"}',
            "object_name": "LK 17 - 50 - Eventos PX - 1%",
        },
    ]
}

import json

converted = json.loads(items['data'][0]["extra_data"])

print(converted["additional_value"])

您也可以使用for-loop 转换所有"extra_data"

items = {
    "data": [
        {
            "object_id": "23843009595880561",
            "event_time": "2019-08-08T13:38:44+0000",
            "extra_data": '{"old_value":"BID_CAP","new_value":"BID_CAP","additional_value": {"old_value":9500,"new_value":8800,"currency":"ARS","type":"payment_amount"}, "adset_minimum_return_on_ad_spend":{"old_value":null,"new_value":null},"type":"bid_type"}',
            "object_name": "LK 17 - 50 - Eventos PX - 1%",
        },
        {
            "object_id": "23843009595880561",
            "event_time": "2019-08-08T13:38:44+0000",
            "extra_data": '{"old_value":"BID_CAP","new_value":"BID_CAP","additional_value": {"old_value":9500,"new_value":8800,"currency":"ARS","type":"payment_amount"}, "adset_minimum_return_on_ad_spend":{"old_value":null,"new_value":null},"type":"bid_type"}',
            "object_name": "LK 17 - 50 - Eventos PX - 1%",
        },
    ]
}

import json

# convert all "extra_data"

for element in items["data"]:
    element["extra_data"] = json.loads( element["extra_data"] )
    
# display all "extra_data"

for element in items["data"]:
    print(element["extra_data"]["additional_value"])

【讨论】:

    【解决方案2】:

    您可以轻松地将 extra_data(看起来像一串 JSON)“重新水化”回 Python 字典:

    import json
    
    my_data = {
        "data": [
            {
                "object_id": "23843009595880561",
                "event_time": "2019-08-08T13:38:44+0000",
                "extra_data": '{"old_value":"BID_CAP","new_value":"BID_CAP","additional_value": {"old_value":9500,"new_value":8800,"currency":"ARS","type":"payment_amount"}, "adset_minimum_return_on_ad_spend":{"old_value":null,"new_value":null},"type":"bid_type"}',
                "object_name": "LK 17 - 50 - Eventos PX - 1%",
            },
            # ....
        ]
    }
    
    for object in my_data["data"]:
        object["extra_data"] = json.loads(object["extra_data"])
    
    print(json.dumps(object, indent=2))
    

    这个输出(只是为了让我们可以看到我们正在使用什么)

    {
      "data": [
        {
          "object_id": "23843009595880561",
          "event_time": "2019-08-08T13:38:44+0000",
          "extra_data": {
            "old_value": "BID_CAP",
            "new_value": "BID_CAP",
            "additional_value": {
              "old_value": 9500,
              "new_value": 8800,
              "currency": "ARS",
              "type": "payment_amount"
            },
            "adset_minimum_return_on_ad_spend": {
              "old_value": null,
              "new_value": null
            },
            "type": "bid_type"
          },
          "object_name": "LK 17 - 50 - Eventos PX - 1%"
        }
      ]
    }
    

    所以现在您可以遍历这些对象(在您的示例中只有一个,但重点是):

    for object in my_data["data"]:
        object["extra_data"] = json.loads(object["extra_data"])
        print(object["extra_data"]["additional_value"])
    

    打印出来

    {'old_value': 9500, 'new_value': 8800, 'currency': 'ARS', 'type': 'payment_amount'}
    

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 2021-05-10
      • 2017-05-05
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 2019-01-18
      • 2021-05-17
      • 2019-06-16
      相关资源
      最近更新 更多