【问题标题】:Best way to manipulate variables inside a JSON config file in Python3在 Python3 中操作 JSON 配置文件中的变量的最佳方法
【发布时间】:2020-04-25 23:01:38
【问题描述】:

我想要一个可以在内部引用值的 JSON 配置文件。例如,考虑下面的 JSON 配置文件:

{
  "hdfs-base":"/user/SOME_HDFS_USER/SOME_PROJECT"
 ,"incoming-path":"$hdfs-base/incoming"
 ,"processing-path":"$hdfs-base/processing"
 ,"processed-path":"$hdfs-base/processed"
}

主要思想是利用已经存储在 json 对象中的值。在这种情况下,将 '$hdfs-base' 替换为 'hdfs-base' 属性的值。你知道已经这样做了吗?我不想使用 ConfigParser 模块,因为我想使用 JSON。

谢谢!

【问题讨论】:

    标签: python json python-3.x parsing config


    【解决方案1】:

    循环遍历你的值,如果有匹配项,则替换键:

    import json
    
    js = open('input.json').read()
    data = json.loads(js)
    
    for k, v in data.items():
      for key in data.keys():
        if key in v:
          data[k] = v.replace("$" + key, data[key])
    

    之前

    hdfs-base /user/SOME_HDFS_USER/SOME_PROJECT
    incoming-path $hdfs-base/incoming
    processing-path $hdfs-base/processing
    processed-path $hdfs-base/processed
    

    之后

    hdfs-base /user/SOME_HDFS_USER/SOME_PROJECT
    incoming-path /user/SOME_HDFS_USER/SOME_PROJECT/incoming
    processing-path /user/SOME_HDFS_USER/SOME_PROJECT/processing
    processed-path /user/SOME_HDFS_USER/SOME_PROJECT/processed
    

    回复:https://repl.it/repls/NumbMammothTelephone

    【讨论】:

    • 我已经写了一个类似的代码。但我想知道所有层次结构中的递归。此代码仅在第一层级有效!可能我不是很清楚。对不起!无论如何感谢您的回答!
    • 这是非常脆弱的代码;如果您有键 aany,您最终可以匹配 $a 作为 "$any" 的一部分。您还需要担心替换顺序的不确定性;如果替换字符串包含变量,您不一定有机会扩展它们。这不是一件小事,OP 正在寻找一个可靠的实现是正确的。
    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 2018-10-01
    • 2021-03-22
    • 2010-10-10
    • 1970-01-01
    • 2012-05-06
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多