检测托管代码中的空[{}] json对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测托管代码中的空[{}] json对象相关的知识,希望对你有一定的参考价值。

我们的应用程序使用json文件进行配置。

  1. 如果文件包含配置数据,我们会解析它并且一切顺利。
  2. 如果文件有坏数据[{asdf 34453%^ $%dfgdsf}]我们处理得很好
  3. 如果配置文件丢失,那么我们处理。

我想弄清楚的情况是它是否是一个空对象,如[{}]我正在寻找一种可靠的方法,通过检查第一个Xnode,最后一个Xnode,Xattribute..something,因为HasElements将返回true为一个空对象。

请不要建议使用第三方库等。不按其他人的决定发生。

我正在使用的代码:

private static bool TryParseJson(MemoryStream msJson)
{
   bool IsValid = false;
   XElement root;

   XmlReader xReader = JsonReaderWriterFactory.CreateJsonReader(msJson, new XmlDictionaryReaderQuotas());

   //an empty json file ( [] ) will parse but have no elements hence the elements check.
   //a file full of giberish...incorrect json format will fail to parse and throw exception hence the try catch

   try
   {
     root = XElement.Load(xReader);
   }
   catch
   {
     return IsValid;
   }

    //an empty file ( [{}] will return positive for HasElements so we also get ?????
    XNode ???? = root.FirstNode;

   if (root.HasElements && !???)
   {
      IsValid = true;
      return IsValid;
   }

   return IsValid;
}
答案

我想我找到了一种处理空物体的方法。我使用有效的json和空json进行测试表明,空对象[{}]仍将返回单个元素,但该元素中没有节点,所以我选择了这个:

//an empty file ( [{}] will return positive for HasElements so we also get 
bool IsEmptyObject = (root.Elements().Nodes().Count() > 0) ? true : false;

我仍然有兴趣听取其他人的贡献。

谢谢

以上是关于检测托管代码中的空[{}] json对象的主要内容,如果未能解决你的问题,请参考以下文章

如何跳过查询条件片段中的空对象?

片段中的 EditText 上的空指针异常 [重复]

JSON数据请求后的空对象

如何从片段中的 JSON 响应中的对象获取数据

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”