|
|
本帖最后由 z573277679 于 2026-6-20 22:40 编辑
如果有使用到上次开源的精易助手替换 窗口程序集_JSON窗口 中的 快速ZJSON_创建条目 子程序即可。这并不是BUG,而是因为1.1版本使用的是ANSI 内存。而1.2版本为了安全、高效做了底层重构。1.2的核心引擎(ZNode)被重构为纯净的 UTF-8 内存。
为什么需要手动转码:其实ZJSON本身的常规 API(比如 取文本)内部是自带智能转码的,平时用根本不需要手动转。 但精易网页助手为了树型框的秒级渲染,采用的是越级底层调用 —— 直接用 Asm_JSON_Iterate 迭代器去取内存裸指针。这种极速模式刻意绕过了高级API的包装损耗,所以你拿到的是最原生的UTF-8指针,在塞给易语言 UI 显示前,手动套一层 编码_Utf8到Ansi 就是正确、性能最高的做法。
|
| 快速ZJSON_创建条目 | | | |
| 参_路径 | 文本型 | | | | 参_节点指针 | 整数型 | | | | 参_节点长度 | 整数型 | | | | 参_等级 | 整数型 | | | | 参_是数组 | 逻辑型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | IterPtr | 整数型 | | | | EndPtr | 整数型 | | | | KeyPtr | 整数型 | | | | KeyLen | 整数型 | | | | ValPtr | 整数型 | | | | ValLen | 整数型 | | | | 节点类型 | 整数型 | | | | 循环索引 | 整数型 | | | | 键名 | 文本型 | | | | 摘要 | 文本型 | | | | 新路径 | 文本型 | | | | 显示名 | 文本型 | | |
EndPtr = 参_节点指针 + 参_节点长度 IterPtr = 参_节点指针 + 1 循环索引 = 0 判断循环首 (真) IterPtr = Asm_JSON_Iterate (IterPtr, EndPtr, KeyPtr, KeyLen, ValPtr, ValLen, 参_是数组 ) 如果真 (IterPtr = 0 ) 跳出循环 ()   节点类型 = Asm_Get_Type_Fast (ValPtr, ValLen ) 如果 (参_是数组 )  键名 = “[” + 到文本 (循环索引 ) + “]”  新路径 = 选择 (参_路径 = “”, 键名, 参_路径 + 键名 )  如果 (KeyLen > 0 )   键名 = 集_ZJSON. 编码_Utf8到Ansi (指针到字节集 (KeyPtr, KeyLen ))    键名 = “” 新路径 = 选择 (参_路径 = “”, 键名, 参_路径 + “.” + 键名)   如果 (节点类型 = 4 )   摘要 = 集_ZJSON. 编码_Utf8到Ansi (指针到字节集 (ValPtr, ValLen ))   如果真 (取文本长度 (摘要 ) > 100 )   摘要 = 取文本左边 (摘要, 100 ) + “...” + #引号      如果 (节点类型 = 6 或 节点类型 = 5 )    摘要 = “”   摘要 = 集_ZJSON. 编码_Utf8到Ansi (指针到字节集 (ValPtr, ValLen ))       判断 (节点类型 = 6 )   显示名 = 键名 + “: [Object]” 树缓冲_加入节点 (显示名, 0, 0, 参_等级 + 1, 新路径 ) 快速ZJSON_创建条目 (新路径, ValPtr, ValLen, 参_等级 + 1, 假) 判断 (节点类型 = 5 )   显示名 = 键名 + “: [Array]” 树缓冲_加入节点 (显示名, 2, 2, 参_等级 + 1, 新路径 ) 快速ZJSON_创建条目 (新路径, ValPtr, ValLen, 参_等级 + 1, 真)  显示名 = 键名 + “: ” + 摘要  树缓冲_加入节点 (显示名, 1, 1, 参_等级 + 1, 新路径 )   循环索引 = 循环索引 + 1 判断循环尾 ()
|
|