Python:当通过loads()从字符串导入JSON时访问JSON中的字典项

问题描述 投票:0回答:1

我似乎无法获取要作为字典加载的字符串(通过 JSON)并将字符串中嵌入的字典项转换为字典中的正确值。

用例:我正在编写一个应用程序,其中文本文件将用于调用 Python 代码,特别是函数。一切都很好,直到我尝试将函数中定义的变量作为字典项。

举个例子,我之前有一个文本文件,它会逐行调用一个函数:

someFunction(variable1 = 11, someListVar = [1,2,3] ...) 
等等

然后我对其进行了更改,以便我的文本文件具有:

someFunction(variable1 = someDict["someKey"], someListVar = [anotherDict["anotherKey"],...] ) 
等等

作为一个最小化的例子:

#this all works fine 
import json

someDict = {"One":"Good"}

x = {"someKey": someDict["One"]}

# convert into JSON string:
y = json.dumps(x)
print(y) 
>>  {"someKey": "Good"} 

print(type(y))
>><class 'str'> 

JSON 字符串的行为也符合预期:

z = json.loads(y) #this can get reloaded as a dictionary
print(z) 
>> {'someKey': 'Good'} 

print(type(z))
>> <class 'dict'> 

但是,另一方面,如果我尝试以字符串开始,似乎无论我如何格式化字符串,我都无法让它引入字典值:

xString = '{"someKey": "someDict[\'One\']"}' #regardless of escape characters

yNew = json.loads(xString)

print(yNew)
>>{'someKey': "someDict['One']"}

print(yNew["someKey"])
>>someDict['One']

最简单的解决方案当然是 eval():

print(eval(yNew["someKey"])) 
#>>Good

但是,当然,这是一个不太理想的解决方案。

FWIW 我尝试了 xString 变量的不同转义字符格式,但无济于事。我想我可以制作某种解析器,但这看起来很不优雅,特别是考虑到这就是 JSON 模块应该做的事情。

python json string dictionary nested
1个回答
0
投票

我认为你应该考虑一下你设计项目的方式。 JSON 文件应该包含变量(变量在服务器/客户端上可以有不同的值)。

但是,您可以使用模板来实现您想要做的事情。一个使用 jinja2 的简单示例:

import json
from jinja2 import Environment

env = Environment()
xString = '{"someKey": "{{ someDict["One"] }}"}'
template = env.from_string(xString)
someDict = {"One":"Good"}

print(template.render(someDict=someDict))

输出:

{"someKey": "Good"}
© www.soinside.com 2019 - 2024. All rights reserved.