Java 使用正则表达式只提取JSON的根元素

Java 使用正则表达式只提取JSON的根元素,java,json,regex,Java,Json,Regex,我有以下JSON数据: { "a": { "b": "value" }, "c": { "a": { "b": "another value" } } } 字段的顺序不确定(即在上面的示例中,b可以高于a)。现在我只想匹配根元素a及其值 我尝试了以下正则表达式: (?:"c".*?})?.*"a":\s?.*?"b":\s?"?(.*?)"?[,}] 我保留了字段c的非

我有以下JSON数据:

{
    "a": {
          "b": "value" 
     },
    "c": {
         "a": {
              "b": "another value"
          }
     }
}
字段的顺序不确定(即在上面的示例中,
b
可以高于
a
)。现在我只想匹配根元素
a
及其值

我尝试了以下正则表达式:

(?:"c".*?})?.*"a":\s?.*?"b":\s?"?(.*?)"?[,}]
我保留了字段
c
的非捕获组。但问题是,如果整个JSON中没有
b
字段,那么对于巨大的有效负载,需要太多步骤才能发现有效负载中没有匹配项(由于回溯)

这是我的实际有效载荷的一个例子,大约需要9秒和500K步数。在我在regex101上的实际负载中,
a
=
文件
b
=
大小
c
=
事件参与者
。因此,这是一种非常低效的匹配JSON数据的方法

那么我在这里错过了什么?任何想法都将不胜感激


注意:我想为Java使用这种类型的正则表达式,因此在标准正则表达式库中不支持递归

这不是正则表达式作业。为什么不直接获取一个JSON解析器库并创建一个新的JSONObject(payload).getJSONObject(“file”).get(“size”)?但我在IBM Qradar上进行字段提取,因此必须使用正则表达式。这不是一个正则表达式作业-例如,值中可能包含JSON,这意味着正则表达式必须考虑字符串。如果您想在正则表达式中执行此操作,请将其分为两次尝试-一次尝试查找单个对象,然后在查找到的对象上进行第二次尝试以获得正确的值。您能给出一个@mksteve示例吗?这与编程无关的任何原因?