#python #json #regex #string
#питон #json #регулярное выражение #строка
Вопрос:
Я пробовал следующее, но мне не удается сопоставить объект в Json
:s*({[^"]*})
Я хочу знать, как заменить тип объекта в Json в виде списка объектов.
Вот пример Json:
{
"resourceType": "ChargeItem",
"id": "example",
"text": {
"status": "generated",
"session": "Done"
},
"identifier": [
{
"system": "http://myHospital.org/ChargeItems",
"value": "654321"
}
],
"definitionUri": [
"http://www.kbv.de/tools/ebm/html/01520_2904360860826220813632.html"
],
"status": "billable",
"code": {
"coding": [
{
"code": "01510",
"display": "Zusatzpauschale für Beobachtung nach diagnostischer Koronarangiografie"
}
]
}
}
Мне нужно, чтобы я хотел преобразовать в эту форму:
{
"resourceType": "ChargeItem",
"id": "example",
"text": [{
"status": "generated",
"session": "Done"
}],
"identifier": [
{
"system": "http://myHospital.org/ChargeItems",
"value": "654321"
}
],
"definitionUri": [
"http://www.kbv.de/tools/ebm/html/01520_2904360860826220813632.html"
],
"status": "billable",
"code": [{
"coding": [
{
"code": "01510",
"display": "Zusatzpauschale für Beobachtung nach diagnostischer Koronarangiografie"
}
]
}]
}
Комментарии:
1. Не было бы проще манипулировать им как объектом, а не пытаться изменить его структуру как строку?
2. Вы не хотите использовать регулярное выражение для изменения строки JSON. Это легко приведет к неправильному формату. Вы бы предпочли десериализовать его, затем обработать, а затем снова сериализовать
3. Регулярное выражение отлично подходит для простых операций, но кое-что просто проще сделать, манипулируя объектом, особенно в этом случае. Посмотрите, как преобразовать json в dict и как манипулировать a
dict
в python. Это действительно просто.
Ответ №1:
Похоже, это несколько простых преобразований:
Во-первых, измените
"text": {
Для
"text": [{
Во-вторых, изменить
},
"identifier": [
Для
}],
"identifier": [
В-третьих, изменить
"code": {
Для
"code": [{
И, наконец, изменить
}
}
<EOF>
Для
}]
}
<EOF>
Однако это может быть не так просто, как кажется, т. Е. Что, если identifer
раздел присутствует не всегда или не сразу следует за text
разделом?
Регулярные выражения — плохой выбор для выполнения этой работы. Было бы намного лучше прочитать файл json в собственную структуру данных Python, применить желаемые изменения, а затем сохранить json обратно в файл.
Комментарии:
1. я хочу преобразовать что-то вроде «key»: { «something»: «something1» } в «key»: [{ «something»: «something1» }] независимо от их имен
2. Основная трудность заключается в добавлении окончания
]
, потому что оно не отображается в той же строке, что и ключ, и вы не можете глобально добавлять a]
после каждого}
.3. так что ему просто нужно сопоставить: { } и заменить на: [{ }]
4. Нет. Например,
identifier
раздел уже представляет собой список; предположительно, вы не хотите преобразовывать его в список списка.
Ответ №2:
Решение с использованием многострочного поиска регулярных выражений
>>> import re
>>> blocks = re.compile(r'(?ms)(.*)("text": )([{][^{}] [}])(,.*"status": "billable"[^"] )("code": )([{][^"] "coding":[^]] ]s })')
>>> m = blocks.search(s)
>>> result = ""
>>> for i in range(1,len(m.groups()) 1):
... if i not in (3,6):
... result = m.group(i)
... else:
... result = "[" m.group(i) "]"
...
>>> result = "n}"