来自 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)
我目前正在处理 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)