我想验证来自外部源的JSON。 JSON RFC明确指出,所有字符串都应该用双引号括起来,单引号无效。但是,内置的JavaScriptSerializer
和Json.NET的JsonConvert.DeserializeObject
都接受单引号字符串作为有效字符串。有没有办法告诉他们不接受单引号字符串,还是有另一个可用的库根据RFC标准进行验证?
示例:
{
"this": "is",
"valid": "json"
}
{
'this': 'is',
'invalid': 'json',
'but': 'parsed',
'correctly': 'by',
'both': 'parsers',
'I': 'mentioned'
}
答案 0 :(得分:1)
请参阅this topic,我认为,有类似于您的问题......
抱歉,我不够专心。你可能正在寻找这样的东西:private bool ValidateJson(string json)
{
using (var reader = new JsonTextReader(new StringReader(json)))
{
while (reader.Read())
{
if (reader.QuoteChar == '\'')
return false;
}
}
return true;
}
然后,让我们测试这个例子:
[TestMethod]
public void SingleQuoteJsonDeserialize()
{
var jsonSingle = "{'this': 'is', 'invalid': 'json', 'but': 'parsed', 'correctly': 'by', 'both': 'parsers', 'I': 'mentioned'}";
var jsonDouble = "{\"this\": \"is\", \"valid\": \"json\"}";
Assert.AreEqual(false, ValidateJson(jsonSingle));
Assert.AreEqual(true, ValidateJson(jsonDouble));
}