是的,是的,我知道有无数关于检测无效 Json 的帖子。他们都说同样的事情:尝试解析或反序列化对象。你猜怎么了?在这种情况下,Json.NET 很乐意解析我格式错误的 JSON 并且不会抱怨。我认为我需要澄清一下:我的 JSON 唯一的问题是数组中的尾随逗号。下面说明了我的问题:
string badJson = "{ 'array' : [ {'objName1' : 'value1'}, {'objName2' : 'value2'}, {'objName3' : 'value3'}, ] }";
var obj = JObject.Parse(badJson);
Run Code Online (Sandbox Code Playgroud)
JSON 在浏览器中无效,因为它在数组中有一个尾随逗号,但它很高兴被解析为一个 jobject。由于我实际上无法使用序列化来检测这个问题,我该怎么办?
请注意,我尝试序列化为一个对象,它产生了相同的结果。
更新:
以下代码将正确检测逗号并将其删除,以防有人需要这样做:
var regex = new Regex(@"(.*?),\s*(\}|\])",(RegexOptions.Multiline));
var cleanJson = regex.Replace(content, m => String.Format("{0} {1}",m.Groups[1].Value,m.Groups[2].Value));
Run Code Online (Sandbox Code Playgroud)
另一种可能的解决方案是将 .NET Json 解析器与我的对象模型一起使用。对我有用的另一个解决方案是将对象解析为 Jobject,然后再次序列化它。这使我可以在需要的地方使用 Json。这比上面的正则表达式慢得多,所以我最终使用了正则表达式。
if Regex.IsMatch(badJson, "^.*,\s*]\s*}$")
throw new Exception("hey that's bad json");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |