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

{
  "a": 1
}

However, I don't have the type of the instance to be serialized or deserialized.

In my situation, what's the most efficient way to minify a JSON string? e.g.

{"a":1}

I don't mind using libraries if they are production-ready.

推荐答案

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

我应该这么做.它确保保留包含空格字符的字符串,并丢弃所有其他空格字符.所有JSON关键字(falsetruenull)必须用逗号或其他标点符号分隔,因此只需保留字符串中的空白.


The first option (\"(?:[^\"\\\\]|\\\\.)*\") matches a double quoted string. The (...) mean that the output is captured and available in the replacement as $1. The [^\"\\\\] matches any character except a double quote or escape character \.

因为匹配是从左到右进行的,所以第二个选项\s+不会匹配字符串中的空格.

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


这可以按预期工作,因为

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

Json相关问答推荐

使用jolt删除空对象

解析SQL中的嵌套JSON

如何用JQ打印JSON文件的路径和键值

用 Jolt 替换 JSON 中的值

如何使用 JOLT 使用输入数组中的值和层次 struct 中的其他字段创建数组

使用 Powershell,如何将 Azure AD 组成员转换为 Json 对象(文件),然后可以更新?

Jolt 不打印任何东西

jq :当路径可变时更新 json 内容

无法使用 vue.js 访问 JSON 数组的项目

转义 Haskell 记录的字段

阅读 JSON 正文 Firebase 云函数

自定义将 struct 解组为切片映射

使用 jq 同时迭代数组

如何为所有 API 端点全局设置 http.ResponseWriter Content-Type 标头?

Python - 如何将 JSON 文件转换为数据框

读取 HttpwebResponse json 响应,C#

android - 在 adb logcat 输出中格式化 json 字符串

Spring Security 和 JSON 身份验证

使用 application/json 优于 text/plain 的优势?

处理 HTTP 请求正文中的可选 JSON 字段