带SuperObject的JSON:元素是数组还是对象?
我从API获得JSON,它有一个怪癖:通常它以对象{x:y}的形式返回tags元素,但如果没有标记,则返回空数组[] 我使用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
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