python和json有点新鲜。 我有这个json文件:
{ "hosts": {
"example1.lab.com" : ["mysql", "apache"],
"example2.lab.com" : ["sqlite", "nmap"],
"example3.lab.com" : ["vim", "bind9"]
}
}
我想要做的是使用hostname变量并提取每个主机名的值。 它有点难以解释,但我使用saltstack,已经遍历主机,我希望它能够使用hostname变量从json文件中提取每个主机的值。
希望我明白。
感谢 O操作。
答案 0 :(得分:4)
你可以沿着这些方向做点什么:
import json
j='''{ "hosts": {
"example1.lab.com" : ["mysql", "apache"],
"example2.lab.com" : ["sqlite", "nmap"],
"example3.lab.com" : ["vim", "bind9"]
}
}'''
specific_key='example2'
found=False
for key,di in json.loads(j).iteritems(): # items on Py 3k
for k,v in di.items():
if k.startswith(specific_key):
found=True
print k,v
break
if found:
break
或者,你可以这样做:
def pairs(args):
for arg in args:
if arg[0].startswith(specific_key):
k,v=arg
print k,v
json.loads(j,object_pairs_hook=pairs)
无论是哪种情况,打印:
example2.lab.com [u'sqlite', u'nmap']
答案 1 :(得分:1)
如果你在字符串中有JSON,那么只需使用Python的json.loads()
函数加载JSON解析JSON并通过将其内容绑定到某个本地名称将其内容加载到命名空间中
示例:
#!/bin/env python
import json
some_json = '''{ "hosts": {
"example1.lab.com" : ["mysql", "apache"],
"example2.lab.com" : ["sqlite", "nmap"],
"example3.lab.com" : ["vim", "bind9"]
}
}'''
some_stuff = json.loads(some_json)
print some_stuff['hosts'].keys()
---> [u'example1.lab.com', u'example3.lab.com', u'example2.lab.com']
如图所示,您可以像访问任何其他Python字典一样访问some_stuff
的内容...在JSON中序列化(编码)的所有顶级变量声明/赋值都将成为该字典中的键
如果JSON内容在文件中,您可以像在Python中的任何其他文件一样打开它,并将文件对象的名称传递给json.load()
函数:
#!/bin/python
import json
with open("some_file.json") as f:
some_stuff = json.load(f)
print ' '.join(some_stuff.keys())
答案 2 :(得分:0)
如果上面的json文件存储为'samplefile.json',你可以用python写如下:
import json
f = open('samplefile.json')
data = json.load(f)
value1 = data['hosts']['example1.lab.com']
value2 = data['hosts']['example2.lab.com']
value3 = data['hosts']['example3.lab.com']