json - 带有 SuperObject 的 JSON:元素是数组还是对象?
问题描述
我从 API 获取 JSON,它有一个怪癖:通常它返回“标签”元素作为对象 {“x”:“y”},但如果没有标签,它会返回空数组 []。
我用 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 有一个属性“DataType”,您可以检查它,如下所示:
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。
推荐阅读
- mysql - Yii2 Dynamic Relational Query Junction with Sort 使用 2 个查询而不是 JOIN,为什么?
- r - R中dcc-garch模型的对数似然检验
- video - FFmpeg 的通用过滤器“v360”缺失
- c++ - 为什么要地图
, int> 有效,但 unordered_map > 没有? - python - 使用字符串模板在 python 中制作 quine?
- pine-script - Pinescript 用我的全部股权设置头寸
- linux - 如何在 Arch linux 中重新创建自动生成的用户目录?
- mysql - 为什么邮递员的这个 POST 请求失败?
- mysql - MySQL聚合连接?
- c# - 如何在 WPF 列表的末尾绘制水平线?