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

max*_*oin 30 .net string json minify

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

{
  "a": 1
}
Run Code Online (Sandbox Code Playgroud)

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

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

{"a":1}
Run Code Online (Sandbox Code Playgroud)

我不介意使用库,如果它们是生产就绪的.

Mik*_*uel 65

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

应该这样做.它确保保留包含空格字符的字符串,并丢弃所有其他空格字符.所有的JSON的关键字(false,true,null)必须用逗号或其他标点符号所以只有空格内字符串分隔需要保留.


第一个选项(\"(?:[^\"\\\\]|\\\\.)*\")匹配双引号字符串.该(...)意味着输出被捕获并在更换为可用$1.本[^\"\\\\]场比赛,除了双引号的任意字符或转义字符\.

由于匹配从左向右发生,因此第二个选项\s+将不匹配字符串中的空格.

所以我们匹配整个字符串,以及字符串外的空格.在前一种情况下,$1是字符串标记,在后一种情况下$1是空字符串,因为未使用组1.


这是按预期工作的

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

  • 我发现它作为 [逐字字符串](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/verbatim)`@"(""(?:[ ^""\\]|\\.)*"")|\s+"` - 双引号代替四斜线 (3认同)