使用RegEx解析JSON对象

时间:2014-07-25 06:24:20

标签: c# regex json

我有以下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"

我想要的是将第一个正则表达式的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个小时里尝试过很多东西,而且我的思绪在旋转。

1 个答案:

答案 0 :(得分:2)

  

到目前为止,我在过去的3个小时里尝试过很多东西,而且我的想法是   纺丝。

不要嘲笑,根本不是,但是在3小时内你可以为JSON编写一个递归下降解析器,或者在大约30分钟内你可以安装JSON.NET,阅读文档/样本并转移到其他的东西。为什么不试试呢?使用正则表达式解析JSON没有前途,因为JSON是一种无上下文的语言,它是递归的,可能是无限长和嵌套的。正则表达式是DFA / NFA。它无法处理CFG。有点像Parsing HTML with Regex(好吧,我无法抗拒)

除非你有一个非常有限的JSON类型并且绝对反对添加第三方库,否则我不会打扰。把它归结为学习经验。