【发布时间】:2014-07-25 06:24:19
【问题描述】:
我有以下 JSON 字符串:
{"FirstName":"John","LastName":"Smith"}
当我应用以下正则表达式时,它会正确返回键值对组:
(?<keyValuePair>(?<key>"\w+"):(?<value>".*?[^\\]"+?))+?
我得到了比赛:
1. "FirstName":"John"
1.1 key:"FirstName"
1.2 value:"John"
2. "LastName":"Smith"
2.1 key:"LastName"
2.2 value:"Smith"
现在,我想要一个对象组,即查找所有对象。在同一个 JSON 字符串上,我应用以下正则表达式
(?<object>{(?<properties>.*?)})
我得到了比赛:
1. {"FirstName":"John","LastName":"Smith"}
1.1 object : {"FirstName":"John","LastName":"Smith"}
1.2 properties : "FirstName":"John","LastName":"Smith"
我想要的是获取第一个正则表达式的组作为第二个正则表达式中的属性子组。
所以预期的结果应该是:
1. {"FirstName":"John","LastName":"Smith"}
1.1 object : {"FirstName":"John","LastName":"Smith"}
1.2 properties : "FirstName":"John","LastName":"Smith"
1.2.1 "FirstName":"John"
1.2.1.1 key : "FirstName"
1.2.1.2 value : "John"
1.2.2 "LastName":"Smith"
1.2.2.1 key : "LastName"
1.2.2.2 value : "Smith"
有人可以帮我创建一个正则表达式来获得上述结果。
这不会被视为重复
自过去 3 小时以来,我已经尝试了很多事情,我的思绪在旋转。
【问题讨论】:
-
您是否有理由使用 RegEx 而不是例如JSON.net?
-
我认为通过正则表达式解析 JSON 不是一个好主意。为什么不直接使用
Newtonsoft JSON及其JObject? -
我有一个从数据库中获取数据并在 .Net 中处理的应用程序。查询是由用户在运行时提供的,所以我不知道架构。他们创建了一个自定义解析器,处理该 json 大约需要 4.5 秒。 Newtonsoft 花了 6 秒。我想尽可能缩短时间。我想看看我是否可以使用正则表达式来实现它。
-
我假设您的意思是 6 秒来解析大量 JSON。上面的示例很小。
-
json 很大。返回数据的网络服务有一个对象,我正在执行的查询有 197 个字符串属性,总共有 6000 个对象