Unity中l(wèi)itjson解析踩坑

Litjson的官網(wǎng)地址:litjson.net

Unity開發(fā)中需要對服務(wù)器傳來的json字符串進行解析顯示,這部分首先想到的是用開源庫Litjson進行處理。

Invalid character '

在拿到服務(wù)器發(fā)來的字符串進行解密處理后得到string類型數(shù)據(jù)后,使用Litjson進行解析:

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

這一步在項目運行時遇到報錯:LitJson.JsonException: Invalid character '

原因是由于有的協(xié)議在解密處理轉(zhuǎn)換為c#的字符串string時,會在末尾有一個'\0'字符;

LitJson庫實現(xiàn)時考慮不周全,沒有考慮到字符‘\0’的關(guān)系;LitJson可能認為一個c#字符串中不應(yīng)該包含’/0’,所以他沒有處理這種情況,對于不能處理的字符他拋出了一個異常。

另外,對于不能處理的字符,Litjson應(yīng)該會將出錯字符的日志打印出來,比如 LitJson.JsonException: Invalid character 'v' in input string;

所以正常這部分出錯應(yīng)該會打出這樣的日志:LitJson.JsonException: Invalid character '\0' in input string;但是由于'\0'在打印的時候會截斷后面的日志,所以只顯示了LitJson.JsonException: Invalid character ' 。

解決方案

若使用Litjson源碼的話,可以在Lexer.cs中,在

private static bool State1 (FsmContext ctx) 函數(shù)的switch處理中,添加上 :

case '\0':

return true;

然后再繼續(xù)使用LitJson.JsonData jsonData = LitJson.JsonMapper.ToObject(msg); 就不會報錯了;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容