当json文本包含许多引号和字符串转义符时,如何从json文本中创建字符串?
例如,以下工作原理:
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"
}
}
}
}
}
}
]
}
"""
是否有一种聪明的方法可以分解?我运气不好,把它分解成几块,然后在组装和打印时重新组装成同一件东西。
答案 0 :(得分:2)
您的字符串本身就是有效的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 )
答案 1 :(得分:0)
我建议您读取实际的JSON文件,而不是将其嵌入到您的Python代码中:
with open('path/to/file.json') as f:
json_string = f.read()
或者,如果您需要将JSON解析为Python对象(字典,列表等):
import json
with open('path/to/file.json') as f:
json_data = json.load(f)