我对Python比较陌生,所以我一直在教自己。 我需要编写一个解析JSON输出的脚本,看起来像这样:
[{u'serverId': 117, u'hostName': u'bla', u'ipAddress': u'10.0.0.1', u'id': 163},
{u'serverId': 221, u'hostName': u'bla2', u'ipAddress': u'10.0.0.1', u'id': 380},
{u'serverId': 213, u'hostName': u'bla2', u'ipAddress': u'10.0.0.3', u'id': 658}]
依此类推,等等......
我有一个主数据源,我遍历以获取主机名。 服务器标识需要辅助源(上面)。
如何使用第一个数据源中的主机名获取相应的ID?
提前致谢!
答案 0 :(得分:0)
这样的事情:
my_list = []
# Read in json file
with open('file.json') as in_file:
my_list = json.load(in_file)
for row in my_list: # Loop through the array
if isinstance(row, dict): # Check we are dealing with a dictionary
if row.get('hostName', '') == 'bla': # compare values
print(row.get('id', None)) # Do something
答案 1 :(得分:0)
每当您需要使用密钥(在您的情况下,主机名)查找另一个数据(在您的情况下,服务器ID)时,通常Python中最合适的数据结构是字典。在这种情况下,您可能希望根据JSON数据构建字典,如下所示:
server_id_mapping = {}
for server_info in json.loads(data_source_2):
server_id_mapping[server_info['hostName']] = server_info['serverId']
然后,要从主机名获取服务器ID,只需使用:
server_id = server_id_mapping[hostname]
答案 2 :(得分:0)
您可以使用filter()
:
filter(lambda d: d['hostName'] == hostName, json.loads(data))
这将返回一个空列表或数据元素列表(以字典形式),其中hostName键等于hostName
。然后您可以按如下方式使用它:
entries = filter(
lambda d: d['hostName'] == hostName,
json.loads(data)
)
if not entries:
raise KeyError('There is no entry with that host name.')
id = entries[0]['id']