【发布时间】:2012-02-13 08:23:32
【问题描述】:
我有一个缩进的 JSON 字符串,例如
{
"a": 1
}
但是,我没有要序列化或反序列化的实例类型。
在我的情况下,最有效的方法 缩小 JSON 字符串是什么?例如
{"a":1}
我不介意使用可用于生产的库。
【问题讨论】:
我有一个缩进的 JSON 字符串,例如
{
"a": 1
}
但是,我没有要序列化或反序列化的实例类型。
在我的情况下,最有效的方法 缩小 JSON 字符串是什么?例如
{"a":1}
我不介意使用可用于生产的库。
【问题讨论】:
Regex.Replace(myJSON, "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1")
应该这样做。它确保保留包含空格字符的字符串,并丢弃所有其他空格字符。所有 JSON 关键字(false、true、null)都必须用逗号或其他标点符号分隔,因此只需要保留字符串中的空格。
第一个选项(\"(?:[^\"\\\\]|\\\\.)*\") 匹配双引号字符串。 (...) 表示输出已被捕获并可作为$1 替换。 [^\"\\\\] 匹配除双引号或转义字符 \ 之外的任何字符。
由于从左到右进行匹配,第二个选项\s+ 不会匹配字符串中的空格。
所以我们匹配整个字符串,以及字符串之外的空格。在前一种情况下,$1 是字符串标记,在后一种情况下,$1 是空字符串,因为未使用组 1。
这按预期工作,因为
var x=0 与 varx=0 不同,x - -(y) 与 x--(y) 不同。【讨论】:
@"(""(?:[^""\\]|\\.)*"")|\s+" 更易读 - 双引号而不是四斜杠
下面的正则表达式对我有用。
string json = @"{
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"width": 500,
"height": 500
}
}"
Regex.Replace(json, @"\s(?=([^""]*""[^""]*"")*[^""]*$)", string.Empty);
我在 .NET Core 应用程序项目中使用它。正则表达式来自that answer。
【讨论】: