一尘不染

缩小.NET中的缩进JSON字符串

json

我有一个缩进的JSON字符串,例如

{
  "a": 1
}

但是,我没有要序列化或反序列化的实例的类型。

在我的情况下, 最小化* JSON字符串的 最有效方法 是什么?例如 *

{"a":1}

我不介意使用可用于生产的库。


阅读 235

收藏
2020-07-27

共1个答案

一尘不染

Regex.Replace(myJSON, "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1")

应该做。它确保保留包含空格字符的字符串,并丢弃所有其他空格字符。所有的JSON的关键字(falsetruenull)必须由逗号或其他标点符号所以只有字符串内需要空格分开予以保留。


第一个选项(\"(?:[^\"\\\\]|\\\\.)*\")匹配双引号字符串。(...)表示已捕获输出并在替换中可用的平均值$1。在[^\"\\\\]除双引号或转义字符匹配任何字符\

由于匹配是从左到右进行的,因此第二个选项\s+将不匹配字符串中的空格。

因此,我们匹配整个字符串,并在字符串外部匹配空格。在前一种情况下,$1为字符串标记,在后一种情况下$1为空字符串,因为未使用组1。


这按预期工作,因为

  1. JSON中唯一可以包含空格的标记是双引号字符串。JSON中没有单引号字符串或注释。
  2. JSON语法要求所有多字符标记之间必须使用单字符标点,因此删除空间不会合并标记。在JavaScript中,这可能会引起问题,因为需要空间来破坏令牌。var x=0是从不同varx=0并且x - -(y)是从不同的x--(y)
2020-07-27