从json文件生成Python字符串

从json文件生成Python字符串,python,json,Python,Json,当json文本包含许多引号和字符串转义时,如何从json文本生成字符串 例如,以下工作: json_string = """ { "styles":[ { "label":"Style", "target":{ "label":"Target"

当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"
                                                        }
                                                }
                                        }
                                }
                        }
                }
        ]
}
"""

有没有一个聪明的方法来打破这种局面?我没有运气将它分成块,并在连接和打印时重新组装成相同的东西。

我建议从实际的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解释很挑剔。