如何修复此正则表达式以匹配Json中的对象并将其替换为Object列表

时间:2019-04-19 19:09:17

标签: python json regex string

我尝试了以下操作,但未能匹配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 :(得分:0)

这似乎是一些简单的转换:

首先,更改

"text": {

"text": [{

第二,更改

},
"identifier": [

}],
"identifier": [

第三,更改

 "code": {

 "code": [{

最后,改变

  }
}
<EOF>

  }]
}
<EOF>

但是,它可能并不像它看起来的那么简单,也就是说,如果identifer部分并不总是存在,或者没有立即跟随text部分,该怎么办?

正则表达式是执行此工作的不佳选择。最好将json文件读入本地Python数据结构,应用所需的更改,然后将json保存回该文件。

答案 1 :(得分:0)

使用多行正则表达式搜索的解决方案

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