乐于分享
好东西不私藏

VFP AI 插件开发花絮9:JSON序列化和反序列化

VFP AI 插件开发花絮9:JSON序列化和反序列化

插件开发过长中,无法避免JSON的序列化和反序列化。之前采用的是 SPS 开发的 JSON 库。
尽管之前使用它完美的处理过百度地图API返回的JSON,但是这次似乎有些翻车。反序列化时,偶尔的报错,面对庞大的源代码,也要头疼一下;而且,在反序列化时,往往“丢失”一部分JSON元素,使得插件的优化变得不那么优雅。
静下心,找到一个处理原生JSON对象的方法。制作了一个 JSONHelper 库。
Set Classlib To JSONHelper.VCX*!* ==========================================*!* JsonHelper 使用示例*!* ==========================================LOCAL loJson, loUser, lcJsonStr, lcOutput* 1. 初始化工具类m.loJson = CREATEOBJECT("JsonHelper")* 2. 准备一段 JSON 字符串(模拟 API 返回)TEXT TO m.lcJsonStr NOSHOW{  "id": "b3ad4fd6-1fb9-49ba-bddc-0cb529965720",  "object": "chat.completion",  "created": 1774366871,  "model": "deepseek-chat",  "choices": [    {      "index": 0,      "message": {        "role": "assistant",        "content": "Hello! How can I assist you today? ??"      },      "logprobs": null,      "finish_reason": "stop"    }  ],  "usage": {    "prompt_tokens": 10,    "completion_tokens": 11,    "total_tokens": 21,    "prompt_tokens_details": {      "cached_tokens": 0    },    "prompt_cache_hit_tokens": 0,    "prompt_cache_miss_tokens": 10  },  "system_fingerprint": "fp_eaab8d114b_prod0820_fp8_kvcache_new_kvcache"}ENDTEXT* 3. 反序列化 (String -> Object)m.loUser = m.loJson.Parse(lcJsonStr)Clear * 4. 序列化 (Object -> String)? "序列化 -- 紧凑模式:"?? m.loJson.Stringify(m.loUser)?? "序列化 -- 格式化:"?? m.loJson.Stringify(m.loUser, .T.)?* 5. 读取数据? "模型:" + m.loUser.model? "内容:" + m.loUser.choices.item(0).message.content? "token总数:" + Transform(m.loUser.usage.total_tokens)? "提示词缓存:" + Transform(m.loUser.usage.prompt_tokens_details.cached_tokens)? "指纹:" + m.loUser.system_fingerprint
输出:
完美!
原生JSON的序列化和反序列化;自动的字符转义和转码;越高的OS版本性能越好;VFP原生操作。
todo:从零构造JSON对象并进行序列化
如果你喜欢,可留言/私信/私聊,按原样有偿共享。