Skip to content

Instantly share code, notes, and snippets.

@daqi
Last active January 13, 2025 02:22
Show Gist options
  • Save daqi/14a80dce38cbde7777436b983dc18d42 to your computer and use it in GitHub Desktop.
Save daqi/14a80dce38cbde7777436b983dc18d42 to your computer and use it in GitHub Desktop.
remove whitespace in JSON
/**
* ### 基础空白字符
* - \s: 匹配所有空白字符包括空格、制表符、换页符等
* ### Unicode空白字符
* - \u00A0: 不间断空格 (NO-BREAK SPACE)
* - \u1680: OGHAM SPACE MARK
* - \u180E: MONGOLIAN VOWEL SEPARATOR
* - \u2000-\u200F: 包含了多个空格和方向控制符
* - \u2028: LINE SEPARATOR
* - \u2029: PARAGRAPH SEPARATOR
* - \u202F: NARROW NO-BREAK SPACE
* - \u205F: MEDIUM MATHEMATICAL SPACE
* - \u3000: IDEOGRAPHIC SPACE (中日韩全角空格)
* ### 零宽字符
* - \uFEFF: ZERO WIDTH NO-BREAK SPACE (BOM)
* - \u200B: ZERO WIDTH SPACE
* - \u200C: ZERO WIDTH NON-JOINER
* - \u200D: ZERO WIDTH JOINER
* ### 其他
* - \x00: NULL字符
* - \u2060: WORD JOINER
* - \uFFF9-\uFFFB: 交互格式控制字符
*/
const reg = /[\s\x00\u00A0\u1680\u180E\u2000-\u200F\u2028-\u202F\u205F\u2060\u3000\uFEFF\u200B-\u200D\uFFF9-\uFFFB]+/;
/**
* 移除字符串中非字符串字面量内的空白字符
* 注: 适用于JSON结构, 不会删除key或value里的空格
*/
export default function removeWhitespaceInJSON(jsonString: string) {
let result = '';
let inString = false;
let escaped = false;
for (let i = 0; i < jsonString.length; i++) {
const char = jsonString[i];
// 遇到未转义的双引号则进入或离开字符串
if (char === '"' && !escaped) {
inString = !inString;
result += char;
}
// 不在字符串里时, 过滤空白
else if (!inString && reg.test(char)) {
continue;
} else {
result += char;
}
// 检查是否是转义符
escaped = !escaped && char === '\\';
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment