Сделать строку Python из файла json
Как я могу сделать строку из текста 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"
}
}
}
}
}
}
]
}
"""
Есть ли умный способ разбить это? Мне не повезло разбить его на куски и собрать заново, чтобы сформировать одно и то же при соединении и печати.
3 ответа
Решение
Ваша строка сама по себе является допустимой 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:
with open('path/to/file.json') as f:
json_string = f.read()
Или, если вам нужно разобрать JSON на объекты Python (dicts, lists и т. Д.):
import json
with open('path/to/file.json') as f:
json_data = json.load(f)
import json
json_string = json.dumps({'styles':[{'label':'style 1'}, {'label':'style 2'}]})
сначала вы импортируете пакет json, затем конвертируете в строку, используя json.dumps