Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带SuperObject的JSON:元素是数组还是对象?_Json_Delphi_Superobject - Fatal编程技术网

带SuperObject的JSON:元素是数组还是对象?

带SuperObject的JSON:元素是数组还是对象?,json,delphi,superobject,Json,Delphi,Superobject,我从API获得JSON,它有一个怪癖:通常它以对象{x:y}的形式返回tags元素,但如果没有标记,则返回空数组[] 我使用SuperObject解析JSON,并使用以下代码: var JsonObject: ISuperObject; item: TSuperAvlEntry; temp: TStringList; begin {...} for item in JsonObject.O['tags'].AsObject do begin t

我从API获得JSON,它有一个怪癖:通常它以对象{x:y}的形式返回tags元素,但如果没有标记,则返回空数组[]

我使用SuperObject解析JSON,并使用以下代码:

var
  JsonObject: ISuperObject;
  item: TSuperAvlEntry;
  temp: TStringList;
begin
{...}
      for item in JsonObject.O['tags'].AsObject do
      begin
        temp.Add(item.Name);
      end;
{...}
它对对象非常有效,但如果是数组,它会因访问冲突错误而崩溃

同样,如果我尝试以下方法:

if JSONObject['tags'].AsArray.Length=0 then
对于空数组,它可以正常工作,但如果它是对象,则会崩溃

我不确定元素可能在标记中,因此不知道在这种情况下如何使用Exists


有什么想法吗?

嗯,看来我自己找到了答案,所以我将与大家分享

ISuperObject有一个可以检查的属性数据类型,如下所示:

if JsonObject['tags'].DataType = stObject then
begin
  for item in JsonObject.O['tags'].AsObject do
  begin
    temp.Add(item.Name);
  end;
end;
stObject和stArray是最有用的检查工具,但也有:stBoolean、stDouble、stCurrency、stInt和stMethod