Unity中litjson解析踩坑

Litjson的官网地址:litjson.net

Unity开发中需要对服务器传来的json字符串进行解析显示,这部分首先想到的是用开源库Litjson进行处理。

Invalid character '

在拿到服务器发来的字符串进行解密处理后得到string类型数据后,使用Litjson进行解析:

LitJson.JsonData jsonData = LitJson.JsonMapper.ToObject(msg);

这一步在项目运行时遇到报错:LitJson.JsonException: Invalid character '

原因是由于有的协议在解密处理转换为c#的字符串string时,会在末尾有一个'\0'字符;

LitJson库实现时考虑不周全,没有考虑到字符‘\0’的关系;LitJson可能认为一个c#字符串中不应该包含’/0’,所以他没有处理这种情况,对于不能处理的字符他抛出了一个异常。

另外,对于不能处理的字符,Litjson应该会将出错字符的日志打印出来,比如 LitJson.JsonException: Invalid character 'v' in input string;

所以正常这部分出错应该会打出这样的日志:LitJson.JsonException: Invalid character '\0' in input string;但是由于'\0'在打印的时候会截断后面的日志,所以只显示了LitJson.JsonException: Invalid character ' 。

解决方案

若使用Litjson源码的话,可以在Lexer.cs中,在

private static bool State1 (FsmContext ctx) 函数的switch处理中,添加上 :

case '\0':

return true;

然后再继续使用LitJson.JsonData jsonData = LitJson.JsonMapper.ToObject(msg); 就不会报错了;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容