Last active
January 13, 2025 02:22
-
-
Save daqi/14a80dce38cbde7777436b983dc18d42 to your computer and use it in GitHub Desktop.
remove whitespace in JSON
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* ### 基础空白字符 | |
* - \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