从json文件生成Python字符串
当json文本包含许多引号和字符串转义时,如何从json文本生成字符串 例如,以下工作:从json文件生成Python字符串,python,json,Python,Json,当json文本包含许多引号和字符串转义时,如何从json文本生成字符串 例如,以下工作: json_string = """ { "styles":[ { "label":"Style", "target":{ "label":"Target"
json_string = """
{
"styles":[
{
"label":"Style",
"target":{
"label":"Target"
},
"overrides":{
"materialProperties":{
"CRYPTO_ID":{
"script":{
"binding":"name"
}
}
}
}
}
]
}
"""
然而,由于逃逸,这并不是:
new_string = """
{
"styles":[
{
"label":"Style",
"target":{
"label":"Target",
"objectName":"*"
},
"overrides":{
"materialProperties":{
"perObj":{
"script":{
"code":"cvex myFn(string myObj=\"\"; export string perObj=\"\") { perObj = myObj; } ",
"bindings":{
"myObj":"myObj"
}
}
}
}
}
}
]
}
"""
有没有一个聪明的方法来打破这种局面?我没有运气将它分成块,并在连接和打印时重新组装成相同的东西。我建议从实际的JSON文件中读取,而不是将其嵌入Python代码中:
with open('path/to/file.json') as f:
json_string = f.read()
或者,如果需要将JSON解析为Python对象(dict、list等):
我建议从实际的JSON文件中读取,而不是将其嵌入到Python代码中:
with open('path/to/file.json') as f:
json_string = f.read()
或者,如果需要将JSON解析为Python对象(dict、list等):
字符串本身是有效的JSON,但是Python仍然将
\
视为特殊字符
使用原始字符串,在字符串前面加上r
:
import json
new_string = r"""
{
"styles":[
{
"label":"Style",
"target":{
"label":"Target",
"objectName":"*"
},
"overrides":{
"materialProperties":{
"perObj":{
"script":{
"code":"cvex myFn(string myObj=\"\"; export string perObj=\"\") { perObj = myObj; } ",
"bindings":{
"myObj":"myObj"
}
}
}
}
}
}
]
}
"""
json.loads( new_string )
或转义您的\
字符:
import json
new_string = """
{
"styles":[
{
"label":"Style",
"target":{
"label":"Target",
"objectName":"*"
},
"overrides":{
"materialProperties":{
"perObj":{
"script":{
"code":"cvex myFn(string myObj=\\"\\"; export string perObj=\\"\\") { perObj = myObj; } ",
"bindings":{
"myObj":"myObj"
}
}
}
}
}
}
]
}
"""
json.loads( new_string )
字符串本身是有效的JSON,但是Python仍然将
\
视为特殊字符
使用原始字符串,在字符串前面加上r
:
import json
new_string = r"""
{
"styles":[
{
"label":"Style",
"target":{
"label":"Target",
"objectName":"*"
},
"overrides":{
"materialProperties":{
"perObj":{
"script":{
"code":"cvex myFn(string myObj=\"\"; export string perObj=\"\") { perObj = myObj; } ",
"bindings":{
"myObj":"myObj"
}
}
}
}
}
}
]
}
"""
json.loads( new_string )
或转义您的\
字符:
import json
new_string = """
{
"styles":[
{
"label":"Style",
"target":{
"label":"Target",
"objectName":"*"
},
"overrides":{
"materialProperties":{
"perObj":{
"script":{
"code":"cvex myFn(string myObj=\\"\\"; export string perObj=\\"\\") { perObj = myObj; } ",
"bindings":{
"myObj":"myObj"
}
}
}
}
}
}
]
}
"""
json.loads( new_string )
新字符串从何而来?你是从档案里读的吗?(然后它不是一个有效的JSON字符串。)还是您生成了它?如果字符串是“按原样”的,您可以通过ast.literal\u eval(new\u string)
获得一些运气。您所说的“不工作”是什么意思?我可以复制粘贴并执行第二个字符串。或者你是说new_string=“”
也是文件的一部分?@MikeScotty,但是你不能用JSON.loads
将其作为JSON来读取。new_string
来自哪里?你是从文件中读取的吗?(然后它不是一个有效的JSON字符串。)还是生成的?如果字符串是“原样的”,您可以通过ast.literal\u eval(新字符串)
获得一些运气。您所说的“不工作”是什么意思?我可以复制粘贴并执行第二个字符串。或者你是说new_string=“”
也是文件的一部分?@MikeScotty,但是你不能用JSON.loads将其作为JSON来读取。哈!成功地转义了!奇怪的是,原始字符串选项不起作用。我说的不起作用的意思是,如果我在最后一个“”,这篇文章被认为是一篇多行评论。哈!成功逃脱!奇怪的是,原始字符串选项不起作用。我所说的“不起作用”是指,如果我在上一次“失败”之后写了什么“,文本被认为是多行注释。无论出于何种原因,这都没有成功,但感谢您的建议。Houdini似乎对json文件的内容及其python解释很挑剔。无论什么原因,这都没有成功,但感谢您的建议。Houdini似乎对json文件的内容及其python解释很挑剔。