Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-通过变量从json文件中提取特定的键/值_Python_Json_Salt Stack - Fatal编程技术网

python-通过变量从json文件中提取特定的键/值

python-通过变量从json文件中提取特定的键/值,python,json,salt-stack,Python,Json,Salt Stack,python和json有点新。 我有这个json文件: { "hosts": { "example1.lab.com" : ["mysql", "apache"], "example2.lab.com" : ["sqlite", "nmap"], "example3.lab.com" : ["vim", "bind9"] } } 我要做的是使用hostname变量并提取每个主机名的值。 这

python和json有点新。 我有这个json文件:

{ "hosts":  {
             "example1.lab.com" : ["mysql", "apache"],
             "example2.lab.com" : ["sqlite", "nmap"],
             "example3.lab.com" : ["vim", "bind9"]
             }
}
我要做的是使用hostname变量并提取每个主机名的值。 这有点难以解释,但我使用的是saltstack,它已经在主机上进行了迭代,我希望它能够使用hostname变量从json文件中提取每个主机的值

希望我能理解

谢谢
o、

您可以按照以下思路做一些事情:

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']

如果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字典一样访问
某些内容
。。。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())

如果上述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']

给定的json格式无效。嘿,我尝试的是使用saltstack编写自己的模块。例如:client=salt.client.LocalClient()ret=client.cmd('*','cmd.run',['yum install%s%s'])%val1%val2我希望它迭代的每个主机名都从json文件中获取它的特定值