来自 json 输出的 python 中的变量赋值(通配符)

Variable assignment in python from json output (wildcard)

我目前正在处理 API 调用输出的一大块 .json。 我正在尝试获取此数据的某些部分并将它们分配给变量,以便我可以在某些重新格式化的消息中使用它们。

这是我的 .json 输出的示例:

{
  "content": {
    "HTTP": {
      "obsess": "1",
      "check_command": "check_http",
      "active_checks_enabled": "1",
      "process_performance_data": "1",
      "last_state_change": "1421870740",
      "last_event_id": "1"
    }
    "PING": {
      "obsess": "1",
      "check_command": "check_ping!100.0,20%!500.0,60%",
      "active_checks_enabled": "1",
      "process_performance_data": "1",
      "last_state_change": "1373404110",
      "last_event_id": "0",
    }
}

使用此输出,我为一些变量创建了变量赋值,但我不知道应该如何使用通配符来替代 'HTTP, PING, etc'

service_name = (service['content']['[]']['last_state_change'])

这是简单的事情吗?在某些 json 调用中,我知道 .[] 可以用作通配符。我已尝试将上面的“[]”替换为“*”和 [],但尚未成功。

我的目标是从 'HTTP' 和 'PING' 所在的每个可能条目中获取相同的数据块(在本例中为 "last_state_change")。

任何帮助将不胜感激,如果仅通过替换某些东西是不可能的,我愿意接受任何建议。

您必须迭代结果 dict:

changes = {}
for x in service['content']:
    changes[x] = service['content'][x]['last_state_change']

如果您只需要两个键并且您确切知道这些键是哪些,您可以在代码中将它们定义为列表,并且只检索这些键的内容。

import json
test = '''{
    "content": {
        "HTTP": {
            "obsess": "1",
            "check_command": "check_http",
            "active_checks_enabled": "1",
            "process_performance_data": "1",
            "last_state_change": "1421870740",
            "last_event_id": "1"
        },
        "PING": {
            "obsess": "1",
            "check_command": "check_ping!100.0,20%!500.0,60%",
            "active_checks_enabled": "1",
            "process_performance_data": "1",
            "last_state_change": "1373404110",
            "last_event_id": "0"
        },
        "somethingelse": {
            "obsess": "1",
            "check_command": "check_ping!100.0,20%!500.0,60%",
            "active_checks_enabled": "1",
            "process_performance_data": "1",
            "last_state_change": "1373404110",
            "last_event_id": "0"
        }

    }
}'''
json = json.loads(test)
print(json)
keys = ['HTTP', 'PING']
for key in json['content']:
    if key in keys:
        last_key_change = json['content'][key]['last_state_change']
        print(key, last_key_change)