乐于分享
好东西不私藏

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, lcOutput1. 初始化工具类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"}ENDTEXT3. 反序列化 (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对象并进行序列化
如果你喜欢,可留言/私信/私聊,按原样有偿共享。