HarmonyOS鸿蒙Next中json字符串里的内容被转义,怎么获取原始字符串?
HarmonyOS鸿蒙Next中json字符串里的内容被转义,怎么获取原始字符串? 比如如下代码,输出的结果会被转义,不能保留我想要的\u0020。
let JsonStr = '{"type": "\u0020"}'
console.log(JsonStr)
输出:

更多关于HarmonyOS鸿蒙Next中json字符串里的内容被转义,怎么获取原始字符串?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
用String.raw包裹字符串,就能拿到原始字符串了:
let rawJsonStr = String.raw`{"type": "\u0020"}`
console.log(rawJsonStr)
DevEco Studio输出:

更多关于HarmonyOS鸿蒙Next中json字符串里的内容被转义,怎么获取原始字符串?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,若JSON字符串内容被转义,可使用JsonUtil类的parseString方法解析JSON对象,再通过getString方法获取原始字符串值。例如:
let jsonString = '{"text":"Hello\\nWorld"}';
let jsonObj = JsonUtil.parseString(jsonString);
let originalText = jsonObj.getString('text'); // 得到"Hello\nWorld"
此方法会处理转义字符,返回原始内容。
在HarmonyOS Next中,JSON字符串中的Unicode转义序列(如\u0020)在解析或打印时会被转换为对应的字符(这里是空格)。要获取包含原始转义序列的字符串,关键在于避免系统对字符串进行“解码”或“规范化”处理。
根据您提供的代码场景,console.log 直接输出字符串变量时,开发工具或运行环境可能会显示转换后的结果。要获取并保留原始的 \u0020 字样,您需要确保该转义序列在字符串字面量中被“保护”起来,使其不被解释。核心方法是对字符串中的反斜杠\本身进行转义。
在您的代码中,字符串 '{"type": "\u0020"}' 在定义时,\u0020 就被语言解析器识别为一个Unicode转义序列并立即转换。要保留其原始形式,应将其写作:
let JsonStr = '{"type": "\\u0020"}'
注意,这里使用了双反斜杠 \\u。第一个反斜杠是转义字符,它告诉解析器第二个反斜杠应作为字面量的反斜杠字符处理,因此最终存储在 JsonStr 变量中的字符串内容就是 {"type": "\u0020"},其中的 \u0020 是四个独立的字符 \、u、0、0、2、0,而不是一个空格。
当您通过 console.log(JsonStr) 输出时,或者后续将此字符串用于网络传输、存储时,它都会保持 \u0020 的形式。如果另一个系统或解析器接收到这个字符串,它会将 \u0020 解释为一个转义序列并转换为空格,这正是JSON标准所规定的行为。
总结:问题根源在于字符串字面量的定义阶段。在代码中书写JSON字符串时,若希望其中的Unicode转义序列保持原始形式,必须对反斜杠进行转义(使用\\)。这样,存储在变量里的就是原始转义字符串。

