首页 > 解决方案 > 卡在使用正则表达式仅提取 JSON 的根元素

问题描述

我有以下 JSON 数据:

{
    "a": {
          "b": "value" 
     },
    "c": {
         "a": {
              "b": "another value"
          }
     }
}

字段的顺序未确定(即b可以在上面a的示例中)。现在我只想匹配根元素a和它的值。

我尝试过的是以下正则表达式:

(?:"c".*?})?.*"a":\s?.*?"b":\s?"?(.*?)"?[,}]

我为 field 保留了非捕获组c。但问题是,如果整个 JSON 中没有b字段,对于巨大的有效载荷,要找出有效载荷中没有匹配项需要太多的步骤(由于回溯)。

是我实际有效载荷的示例,它花费了大约 9 秒和 500K 步。在我在 regex101 上的实际有效载荷中,a= fileb=sizec= event_actor。因此,这将是匹配 JSON 数据的非常低效的方式。

那么我在这里缺少什么?任何想法,将不胜感激。

注意:我想要这种类型的Java正则表达式,因此标准正则表达式库不支持递归。

标签: javajsonregex

解决方案


推荐阅读