我想检查JSON对象是否有键"error"
,如果有,我想"继续"循环,否则程序可以转到所有循环。
这是JSON:
[
{
"cenario": {
"origem": "",
"out": "SNC",
"country": "",
},
"item": "0015963",
"cod": "17894904009319",
"nat_rec": null
},
{
"item": "0012868",
"error": "product unavailable",
"status": "unavailable",
}
]
如何检查正在读取的对象是否具有键"error"
?
我试过:
jValue.FindValue('error') // The problem it's going to search for all objects.
jValue.TryGetValue('error', jArray) // if it doesn't find the key in the index that it's searching at the moment, it breaks the application.
我在做:
response:= IdHTTP.Get(url);
jValue:= TJsonObject.ParseJSONValue(response);
for x := 0 to 2 do
begin
if jValue.TryGetValue('error', jvalue) then
begin
continue;
end;
memo.Lines.Add('cod_item :' + jValue.GetValue<string>('['+intToStr(x)+'].item'));
memo.Lines.Add('cod: ' + jValue.GetValue<string>('['+intToStr(x)+'].cod'));
end;
2条答案
按热度按时间dtcbnfnu1#
在你的代码中,
jValue
指向一个TJSONArray
,所以当你在它上面调用TryGetValue('error')
时,你是在数组本身上寻找一个名为'error'
的字段,这显然是行不通的,只有在TJONObject
上调用它才行。当查询数组本身的
'error'
字段时,您需要包括每个对象的索引,例如:或者,您可以在内存中迭代实际对象,而不是通过路径搜索,例如:
vyswwuz22#
你可以把它解析成一个数组,然后迭代这个数组。HasValueAtObjectKey和GetValueAtObjectKey这两个函数演示了两种不同的检查对象键的方法。