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

标签 .net string json minify

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

{
  "a": 1
}

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

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

{"a":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) .

关于.net - 在 .NET 中缩小缩进的 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913138/

相关文章:

java - 使用字符串生成器时出现错误 "String index out of range: 0"

c# - 不可变变量和不可变对象(immutable对象)

c# - 为什么值类型不能为空

python - 删除Python中两个字符之间的字符

javascript - 从文本中获取子字符串

java - ObjectMapper - 如何在 JSON 中发送空值

c# - 将托管字符串编码(marshal)到字符指针 c#

.net - 如何在 GAC 中引用程序集

python - 给定对象的 JSON.dump 在命令行中工作,而不是在脚本内工作

javascript - 将项目推送到 JSON 数组中