C# 使用正则表达式解析JSON对象

C# 使用正则表达式解析JSON对象,c#,regex,json,C#,Regex,Json,我有以下JSON字符串: {"FirstName":"John","LastName":"Smith"} 应用以下正则表达式时,它会正确返回键值对组: (?<keyValuePair>(?<key>"\w+"):(?<value>".*?[^\\]"+?))+? 现在,我想为对象建立一个组,即查找所有对象。。在同一个JSON字符串上,我应用以下正则表达式 (?<object>{(?<properties>.*?)}) 我想要的是得

我有以下JSON字符串:

{"FirstName":"John","LastName":"Smith"}
应用以下正则表达式时,它会正确返回键值对组:

(?<keyValuePair>(?<key>"\w+"):(?<value>".*?[^\\]"+?))+?
现在,我想为对象建立一个组,即查找所有对象。。在同一个JSON字符串上,我应用以下正则表达式

(?<object>{(?<properties>.*?)})
我想要的是得到第一个正则表达式的goups作为第二个正则表达式中属性的子组

因此,预期结果应该是:

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个小时里,我已经尝试了很多东西,我的头脑在旋转

在过去的3个小时里,我已经尝试了很多东西,我的头脑已经开始紧张起来 旋转

不必客气,一点也不,但在3小时内,您就可以为JSON编写一个递归下降解析器,或者在大约30分钟内,您就可以安装JSON.NET,阅读文档/示例并继续其他内容。为什么现在不试试呢?使用正则表达式解析JSON是没有前途的,因为JSON是一种上下文无关的语言,它是递归的,可能无限长且嵌套。正则表达式是DFA/NFA。它无法处理CFG。有点像(好吧,我忍不住)


除非您的JSON类型非常有限,并且绝对反对添加第三方库,否则我不会麻烦您。将其归因于学习经验。

使用正则表达式而不是JSON.net有什么原因吗?我认为通过正则表达式解析JSON不是个好主意。为什么不直接使用
newtonsoftjson
及其
JObject
?我有一个从数据库获取数据并在.Net中处理的应用程序。查询是由用户在运行时提供的,所以我不知道模式。他们创建了一个自定义解析器,处理json大约需要4.5秒。Newtonsoft花了6秒钟。我想把时间尽量缩短。我想看看我是否能用正则表达式实现它。我想你的意思是6秒来解析一大块JSON。上面的示例很小,json非常大。返回数据的网络服务有一个对象,我正在执行的查询有197个字符串属性,总共有6000个对象。我尝试过Newtonsoft,我们有一个自定义JSON解析器,它的性能比Newtonsoft更好,然而,正如我所提到的,这两个都分别消耗6秒和4秒,因此我正在寻找更快的选项,并已转向regexHmm。。问题是:正则表达式会比编写良好的自定义解析器更快吗?我有一个疑问。JSON看起来很简单,但递归可能是致命的。您潜在的JSON输入是否非常有限?如-你能在一页中合理地描述可能的输入吗?即便如此,我仍然会考虑手写递归下降分析器。慢的部分可能是对象属性的查找/映射,而不是实际的解析。JSON将简单地返回具有简单字符串属性且没有嵌套的对象数组。Hmm。。你写过“所以我不知道模式”。看起来您知道模式,所以我认为定制的、编写良好的解析器将比正则表达式更有效。(我认为在一个阶段中逐个字符解析JSON就足够了)。Regex不会做得更快。
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"