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/'】
这样就可以正常转换了。