LotusScript中NotesJSONNavigator开启PreferUTF8后字符串返回未文档化类型6问题
LotusScript JSON解析器PreferUTF8开启后字符串类型返回值6的原因
类型值6是未写入官方公开文档的UTF-8格式字符串专属类型标识,属于属性生效后的正常返回,不是解析bug:
- 你测试得到的
JSONelem_type_string = 3,对应PreferUTF8 = False时的默认字符串类型:此时解析器会自动将JSON原文中的UTF-8字符串转换为Domino原生的LMBCS(Lotus多字节字符集)编码存储,对应公开的字符串类型常量。 - 当设置
PreferUTF8 = True时,解析器会跳过LMBCS编码转换步骤,直接保留字符串的原始UTF-8字节格式存储,此时字符串节点就会返回未公开的类型值6,这个常量因为HCL官方文档更新疏漏,既没有在公开文档中标注,也没有在LotusScript的内置常量列表中暴露。
兼容写法建议
做节点类型判断时,不要仅硬编码匹配类型值3识别字符串,需要同时把值6纳入判断范围,避免逻辑异常,参考代码:
Function IsJSONString(targetElem As NotesJSONElement) As Boolean ' 同时兼容默认LMBCS字符串、UTF-8原生字符串两种场景 IsJSONString = (targetElem.Type = JSONelem_type_string Or targetElem.Type = 6) End Function
补充说明:数字、布尔、null、对象、数组类型不存在编码转换逻辑,因此这些类型的返回值不会受
PreferUTF8属性开关影响,和你测试得到的结果一致。
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

