有没有办法可以从json文件在本地范围内创建命名变量?
这是我的json文件,我想在本地范围内创建变量,命名为我的json字典的路径
这是我手动创建它们的方式,我想自动为所有json文件执行此操作。有可能吗?
class board(object):
def __init__(self, json, image):
self.json = json
self.image = image
def extract_json(self, *args):
with open(self.json) as data_file:
data = json.load(data_file)
jsonpath_expr = parse(".".join(args))
return jsonpath_expr.find(data)[0].value
MyAgonism = board('document.json', './tabellone.jpg')
boxes_time_minutes_coord = MyAgonism.extract_json("boxes", "time_minutes", "coord")
boxes_time_seconds_coord = MyAgonism.extract_json("boxes", "time_seconds", "coord")
boxes_score_home_coord = MyAgonism.extract_json("boxes", "score_home", "coord")
答案 0 :(得分:1)
我认为你让它变得比它需要的复杂得多。
with open('document.json') as f:
d = json.load(f)
time_minutes_coords = d['boxes']['time_minutes']['coord']
time_seconds_coords = d['boxes']['time_seconds']['coord']
score_home_coords = d['boxes']['score_home']['coord']
如果你真的想从json文件中的键创建本地范围内的命名变量,你可以使用locals()
字典(但这是一个糟糕的主意,它只是对从json字典中引用它们。
# Flatten the dictionary keys.
# This turns ['boxes']['time_minutes']['coord']
# into "boxes_time_minutes_coord"
def flatten_dict(d, k_pre=None, delim='_', fd=None):
if fd is None:
fd = {}
for k, v in d.iteritems():
if k_pre is not None:
k = '{0}{1}{2}'.format(k_pre, delim, k)
if isinstance(v, dict):
flatten_dict(v, k, delim, fd)
else:
fd[k] = v
return fd
fd = flatten_dict(d)
locals().update(fd)
print boxes_time_minutes_coord
很多注意事项,比如在本地范围内覆盖其他变量的可能性,或者在展平后两个字典键可能相同的可能性,除非您选择不会出现在任何字典键中的分隔符。或者,如果您的密钥包含变量名称的无效字符(例如空格),这将无法工作。