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); 就不會報錯了;