我有一个原始的字符串。我只想验证字符串是否是有效的JSON。我用的是JSON.NET。
当前回答
下面是一个基于Habib答案的TryParse扩展方法:
public static bool TryParse(this string strInput, out JToken output)
{
if (String.IsNullOrWhiteSpace(strInput))
{
output = null;
return false;
}
strInput = strInput.Trim();
if ((strInput.StartsWith("{") && strInput.EndsWith("}")) || //For object
(strInput.StartsWith("[") && strInput.EndsWith("]"))) //For array
{
try
{
output = JToken.Parse(strInput);
return true;
}
catch (JsonReaderException jex)
{
//Exception in parsing json
//optional: LogError(jex);
output = null;
return false;
}
catch (Exception ex) //some other exception
{
//optional: LogError(ex);
output = null;
return false;
}
}
else
{
output = null;
return false;
}
}
用法:
JToken jToken;
if (strJson.TryParse(out jToken))
{
// work with jToken
}
else
{
// not valid json
}
其他回答
使用JContainer.Parse(str)方法来检查str是否是一个有效的Json。如果这个抛出异常,那么它不是一个有效的Json。
JObject。Parse -可以用来检查字符串是否是一个有效的Json对象 JArray。Parse -可以用来检查字符串是否是一个有效的Json数组 JContainer。解析-可以用来检查Json对象和数组
⚠️使用System.Text.Json的替代选项⚠️
对于. net Core,也可以使用System.Text.Json命名空间,并使用JsonDocument进行解析。示例:基于命名空间操作的扩展方法:
public static bool IsJsonValid(this string txt)
{
try { return JsonDocument.Parse(txt) != null; } catch {}
return false;
}
即使返回异常也返回json字符串的扩展:
public static string OnlyValidJson(this string strInput) { if (string.IsNullOrWhiteSpace(strInput)) { return @"[""Json is empty""]"; } strInput = strInput.Trim(); if ((strInput.StartsWith("{") && strInput.EndsWith("}")) || (strInput.StartsWith("[") && strInput.EndsWith("]"))) { try { string strEscape = strInput.Replace("\\n", "").Replace("\\r", "").Replace("\n", "").Replace("\r", ""); JToken.Parse(strEscape); return strEscape; } catch (JsonReaderException jex) { return @$"{{""JsonReaderException"":""{jex.Message}""}}"; } catch (Exception ex) { Console.WriteLine(ex.ToString()); return @$"{{""Exception"":""{ex.ToString()}""}}"; } } else { return @"[""Json not start with { or [.""]"; } }
关于汤姆·比奇的回答;相反,我想到了以下几点:
public bool ValidateJSON(string s)
{
try
{
JToken.Parse(s);
return true;
}
catch (JsonReaderException ex)
{
Trace.WriteLine(ex);
return false;
}
}
有以下用法:
if (ValidateJSON(strMsg))
{
var newGroup = DeserializeGroup(strMsg);
}
基于Habib的回答,你可以编写一个扩展方法:
public static bool ValidateJSON(this string s)
{
try
{
JToken.Parse(s);
return true;
}
catch (JsonReaderException ex)
{
Trace.WriteLine(ex);
return false;
}
}
然后可以这样使用:
if(stringObject.ValidateJSON())
{
// Valid JSON!
}
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?
- c#对象列表,我如何得到一个属性的和