删除JSON数据中的方括号,但引号之间除外

时间:2014-09-24 14:14:06

标签: c# regex json

我使用的是从this so answer

改编的以下代码
// 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"}
]

OR Minified(因为它在我的真实代码中)

[[{"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"}
]

缩小的:

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

我必须承认我并不完全理解我所使用的正则表达式。

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

1 个答案:

答案 0 :(得分:1)

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

试试这个。参见demo.Replace by``。不要忘记旗帜。

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