2014-09-24 74 views
0

之间我使用改编自this so answer删除在JSON数据方括号中除了qoutes

// remove outer bracket 
JSONdata = JSONdata.Trim().Trim('[', ']'); 

// remove white space and line breaks except between double qoutes 
JSONdata = Regex.Replace(JSONdata.Trim('"').Replace("\\\"", "\""), "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1"); 

// add back bracket 
JSONdata = "[" + JSONdata + "]"; 

以下代码,然后我得到的数据是这样的:

[ 
[ 
    {"OptionChoice":14151,"OptionText":"Television"}, 
    {"OptionChoice":14755,"OptionText":"Test[ something ]"} 
] 
,{"OptionChoice":361,"OptionText":"Yes"} 
] 

或缩小的(因为它是我的真码)

[[{"OptionChoice":14151,"OptionText":"Television"},{"OptionChoice":14755,"OptionText":"Test[ something ]"}],{"OptionChoice":361,"OptionText":"Yes"}] 

添加了空白和换行符k仅为例子。真正的数据没有空白或换行符

我想能够得到保持外部括号,但删除不使用双引号的内部括号的设置。

编辑:预期输出

[ 
    {"OptionChoice":14151,"OptionText":"Television"}, 
    {"OptionChoice":14755,"OptionText":"Test[ something ]"},  
    {"OptionChoice":361,"OptionText":"Yes"} 
] 

精缩:

[{"OptionChoice":14151,"OptionText":"Television"},{"OptionChoice":14755,"OptionText":"Test[ something ]"},{"OptionChoice":361,"OptionText":"Yes"}] 

我必须承认,我不完全理解,我已经使用正则表达式。

...现在我有两个问题。

+1

什么是d预期输出 – vks 2014-09-24 14:25:42

+1

这可能是更好地使用图书馆像JSON.NET解析和格式化JSON,而不是处理字符串 – 2014-09-24 14:32:21

+0

它可能是,我最终可能会在切换未来,但现在我只想修复无效的数据。显然最好的办法是让客户端通过有效的JSON,我也在做。 – gooddadmike 2014-09-24 14:41:43

回答

1
(?!^)\[(?=(?:[^"]*"[^"]*")*[^"]*$)|\](?!$)(?=(?:[^"]*"[^"]*")*[^"]*$) 

试试这个。看demo.Replace by``。别忘了标志。

http://regex101.com/r/zR2tR4/25

+0

这个工程,你只是介绍我一个非常好的工具。但是,它不具备C#代码生成器。我相信C#regexp的语法是不同的动物 – gooddadmike 2014-09-24 14:51:58

+0

@lazfish它可能是不同的,但正则表达式可能不会太差。正则表达式的应用可能会有所不同。Anywayz你可以在那里得到一个正则表达式的想法:) – vks 2014-09-24 14:54:25

+0

[it当我尝试转换它时找到了括号](http://regexhero.net/tester/?id=94cec8a1-3ebd-41f0-bb30-94475962ced8) – gooddadmike 2014-09-24 15:08:00