python - 在 json 文件中使用变量

标签 python json

我需要定义一个变量并在整个 json 文件中使用它。

这是我的 MWE:(改编自 here)

{
  "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`}}"
  }
}

对象objectBobjectAaccess_key字段必须等于“abc”,即由我在文件开头定义。

我怎样才能在 python 中实现这个目标?

最佳答案

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 anchor 和引用

您可以为此目的使用 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"
 }
}

关于python - 在 json 文件中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23869882/

相关文章:

python - 无法让 INSERT 在 SPARQLWrapper 中工作

ios - 何时使用 Swift 使用 do-catch block

php - 通过 php 和 JSON 将 android 应用程序连接到 MySQL

json - Kafka Connect,获取 JsonConverter 的 Json Schema

c# - 将枚举序列化为字符串时,是否可以添加新的枚举成员而不破坏与 Newtonsoft json 的契约(Contract)?

python - 绘制概率密度

javascript - 您可以通过 python 或 javascript 使用机器人自动化从页面检索重定向 URL 吗?

python - 使用以每小时时间序列作为输入的 LSTM 预测每日值(value)

python - 求解 numpy/matplotlib 中插值数据中的零

javascript - Jquery Datatable 拖放行,从 json 数据重新排序行