裏面我有一些JSON我解析,看起來像這樣:正則表達式來替換斜線JSON
{
"dhkplhfnhceodhffomolpfigojocbpcb": {
"external_crx": "C:\Program Files\Babylon\Babylon-Pro\Utils\BabylonChrome.crx",
"external_version": "1.1"
}
}
不幸的是,JSON.NET確實給了我一個錯誤,因爲單斜線。有沒有辦法讓單斜槓?如果不是的話,我可以使用什麼正則表達式來以一種安全的方式對文件路徑進行雙斜槓,而不用搞亂可能有正確雙斜槓的其他條目?
更新錯誤(使用JsonTextReader)是「錯誤的JSON轉義序列:\ P。第4行,位置25」。事實證明,在這個問題上還有更多需要注意的地方,因爲反斜槓在那裏支持十六進制和八進制值(http://json.codeplex.com/discussions/244265)。我如何知道何時我正在查看十六進制/八進制數,而不僅僅是一個文件路徑反斜槓,有人忘記了反斜槓?
case 'u':
// ...
case 'x':
hexValues = new char[2];
for (int i = 0; i < hexValues.Length; i++)
{
if ((currentChar = MoveNext()) != '\0' || !_end)
hexValues[i] = currentChar;
else
throw CreateJsonReaderException("Unexpected end while parsing unicode character. Line {0}, position {1}.", _currentLineNumber, _currentLinePosition);
}
hexChar = Convert.ToChar(int.Parse(new string(hexValues), NumberStyles.HexNumber, NumberFormatInfo.InvariantInfo));
_buffer.Append(hexChar);
break;
default:
var octValues = new char[3];
var octLength = 0;
for (int i = 0; i < octValues.Length; i++)
{
var octalChar = i==0 ? currentChar : PeekNext();
if ((octalChar > 1 || !_end) && octalChar>='0' && octalChar<'8')
{
octValues[i] = (char)octalChar;
if(i!=0) MoveNext();
octLength++;
}
else
{
break;
}
}
if (octLength>0)
{
hexChar = Convert.ToChar(Convert.ToInt32(new string(octValues, 0, octLength), 8));
_buffer.Append(hexChar);
break;
}
throw CreateJsonReaderException("Bad JSON escape sequence: {0}. Line {1}, position {2}.", @"\" + currentChar, _currentLineNumber, _currentLinePosition);
}
}
else
{
throw CreateJsonReaderException("Unterminated string. Expected delimiter: {0}. Line {1}, position {2}.", quote, _currentLineNumber, _currentLinePosition);
}
break;
你可以發佈你指的整個代碼塊嗎? – Chandu