Сделать строку Python из файла json - PullRequest
0 голосов
/ 28 августа 2018

Как я могу сделать строку из текста 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 голосов
/ 28 августа 2018

Ваша строка сама по себе является допустимым 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 )
0 голосов
/ 28 августа 2018

Я бы рекомендовал читать из реального файла 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)
...