【问题标题】:How can I validate JSON using .NET libraries that do NOT accept single quoted string tokens?如何使用不接受单引号字符串标记的 .NET 库验证 JSON?
【发布时间】:2016-06-03 11:30:06
【问题描述】:

我想验证来自外部来源的 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'
}

【问题讨论】:

    标签: .net json validation


    【解决方案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));
        }
    

    【讨论】:

    • 嗯,这与我想要达到的目标几乎相反,所以没有帮助。我已经发现了,但它只用于序列化,而不是反序列化。
    • 我已经更正了答案。请检查一下...希望对您有帮助
    • 宾果游戏,这就是我要找的。非常感谢您的解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2012-12-10
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多