从json文件制作Python字符串

时间:2018-08-28 07:03:55

标签: python json houdini vex

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

是否有一种聪明的方法可以分解?我运气不好,把它分解成几块,然后在组装和打印时重新组装成同一件东西。

2 个答案:

答案 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)