Как я могу исправить это регулярное выражение, чтобы соответствовать объект в Json и заменить его в виде списка объектов - PullRequest
0 голосов
/ 19 апреля 2019

Я пробовал следующее, но мне не удалось сопоставить объект в 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"
      }
    ]
  }]
}

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Решение с использованием многострочного регулярного выражения

>>> 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}"
0 голосов
/ 19 апреля 2019

Это выглядит как несколько простых преобразований:

Во-первых, измените

"text": {

на

"text": [{

Во-вторых, измените

},
"identifier": [

до

}],
"identifier": [

В-третьих, измените

 "code": {

на

 "code": [{

И, наконец, измените

  }
}
<EOF>

на

  }]
}
<EOF>

Однако, это может быть не так просто, как кажется, то есть что, если раздел identifer присутствует не всегда или не следует сразу за разделом text?

Регулярные выражения - плохой выбор для выполнения этой работы.Было бы намного лучше прочитать файл json в собственную структуру данных Python, применить нужные изменения, а затем сохранить json обратно в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...