如何将变量传递给JSON,对于Python?

0s7z1bwu  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(135)

我是JSON的新手,所以提前为这个愚蠢的问题道歉。
我想用value字段中的变量编写JSON。它看起来像这样:

def print_json(user_name):
    opened_json = open('way/to/json/file')
    tmp = json.load(opened_json)

    res = tmp(['path_to_folder'](user_name))
    print(res)

def main(user_name):
    print_json(user_name)

main('user')

字符串
JSON:

{"path_to_folder": "/Users/" + user_name + "/my_folder/"}


等待输出:

/Users/user/my_folder/


请告诉我是否有解决方案。
提前感谢!

编辑:我的问题,我不能正确添加变量到JSON。它标记为红色。错误的语法,当我尝试concat。

fruv7luv

fruv7luv1#

你想要的东西在JSON中是不可能直接实现的,因为它不支持“模板化”。
一种解决方案是使用模板语言(如Jinja)来编写JSON模板,然后在没有json库的情况下加载此文件,并使用Jinja填充值,最后使用json.loads从渲染的字符串加载字典。
你的json文件可能看起来像这样:

{"path_to_folder": "/Users/{{ user_name }}/my_folder/"}

字符串
你的Python代码:

import json
from jinja2 import Environment, FileSystemLoader

env = Environment(
    FileSystemLoader("path/to/template")
)
template = env.get_template("template_filename.json")

def print_json(username):
    return json.loads(
        template.render(user_name=username)
    )
...


事实上,如果这是一个简单的一次性的事情,使用Python的内置模板可能会更好。我建议在JSON的情况下使用老式的格式,因为否则你将不得不转义很多大括号:
JSON文件:

{"path_to_folder": "/Users/%(user_name)s/my_folder/"}


“渲染”:

with open("path/to/json") as f:
    rendered = json.loads(f.read() % {"user_name": username})

相关问题