在JSON文件中使用变量
我需要在json文件中定义一个变量,然后在整个文件中使用它。
这是我的简单示例:(改编自 这里)
{
"variables": {
"my_access_key": "abc",
"my_secret_key": "def"
},
"objectB": {
"type": "1",
"access_key": "{{user `my_access_key`}}",
"secret_key": "{{user `my_secret_key`}}"
},
"objectA": {
"type": "2",
"access_key": "{{user `my_access_key`}}",
"secret_key": "{{user `my_secret_key`}}"
}
}
对象 objectB
和 objectA
的 access_key
字段必须等于 "abc
",这个值是我在文件开头定义的。
我该如何在python中实现这个目标呢?
1 个回答
10
JSON不支持变量引用
在YAML中,你可以定义变量,为它们设置引用名称,然后在文件的其他地方重复使用这些变量。
而JSON就没有这种功能,你必须一个地方一个地方地自己设置这些值。
程序化构建JSON
import json
access = "AAA"
secret = "XXX"
dct = {"variables": {"my_access_key": access, "my_secret_key": secret},
"objectB": {"type": "1", "access_key": access, "secret_key": secret},
"objectA": {"type": "2", "access_key": access, "secret_key": secret}
}
json_str = json.dumps(dct, indent=True)
print json_str
这段代码会打印什么
{
"objectA": {
"access_key": "AAA",
"secret_key": "XXX",
"type": "2"
},
"variables": {
"my_secret_key": "XXX",
"my_access_key": "AAA"
},
"objectB": {
"access_key": "AAA",
"secret_key": "XXX",
"type": "1"
}
}
使用YAML的锚点和引用
你可以利用YAML的这个特性来实现这个目的。因为YAML相对容易编辑,所以它可能是配置文件的一个不错选择。
在使用之前,确保你安装了pyyaml:
$ pip install pyyaml
然后是代码(在variables
中修改名称以满足我们的需求):
import json
import yaml
yaml_str = """
variables: &keys
access_key: abc
secret_key: def
objectB:
<<: *keys
type: "1"
objectA:
<<: *keys
type: "2"
"""
dct = yaml.load(yaml_str)
json_str = json.dumps(dct, indent=True)
print json_str
这段代码会打印
{
"objectA": {
"access_key": "abc",
"secret_key": "def",
"type": "2"
},
"variables": {
"access_key": "abc",
"secret_key": "def"
},
"objectB": {
"access_key": "abc",
"secret_key": "def",
"type": "1"
}
}