Newtonsoft.Json.JsonReaderException:“Bad JSON escape sequence: \*. Path '****', line *, position **.”

测试Json字符串msg:

{"field1":"\\9527\","field2":"\\\\data\\","field3":"\r\n\\G\\d\\\","field4":"TEST
TEST\1TEST\\GTEST\\\GTEST2\\\\TEST3\\\\\TESTD"}

可以看到Json中充斥大量的\,之前一直用的是下面代码处理:

string pattern = @"(\\[^bfrnt\\/'\""])";
msg = Regex.Replace(msg, pattern, "\\$1");
dynamic js1 = JsonConvert.DeserializeObject(msg);

逻辑是将反斜杠“\” 和“非【bfrnt\/'"】的字符”前面再加一个“\”。

但是遇到上面的例子,执行的时候还是抛出了异常:

Newtonsoft.Json.JsonReaderException:“Bad JSON escape sequence: \9. Path 'field1', line 1, position 15.”

于是我稍微修改了一下正则,用负向先行断言排除掉【bfrnt/'】:

string pattern2 = @"(\\(?![bfrnt/']))";
msg = Regex.Replace(msg, pattern2, "\\$1");
dynamic js2 = JsonConvert.DeserializeObject(msg);

逻辑是在反斜杠“\”前面再加一个“\”,但是“\”的后面不能为【bfrnt/'】

这样就可以正常转换了。

 

posted @ 2023-12-20 10:19  新*  阅读(329)  评论(0编辑  收藏  举报