在 Delphi 2009 中使用 SuperObject。如何处理访问可能不存在的 JSON 键的字符串值的情况?
例如,对于这个示例代码,JSONgood 有一个键“key2”和一个值,但 JSONbad 没有一个“key2”,因此当我尝试将其转换为字符串时,它的计算结果为 nil 并导致错误。有没有一种简单的方法可以将 nil 转换为字符串值或在我尝试将它作为字符串读取而不读取它之前检测它?
var
ParsedJSON : ISuperObject;
s : string;
JSONgood, JSONbad: string;
begin
JSONgood, = ''
+' { '
+' "key1": "one", '
+' "key2": "not missing" '
+' } '
ParsedJSON := SOJSONgood,
s := ParsedJSON ['key2'].AsString;
showmessage(s);
JSONbad: = ''
+' { '
+' "key1": "one" '
+' } '
ParsedJSON := SOJSONbad:
s := ParsedJSON ['key2'].AsString; //key 2 does not exist so ParsedJSON ['key2'] is nil
showmeassage(s);
end;
顺便说一句,我确实尝试使用 X-Superobject,因为我知道它可以处理这个问题,但是抱怨它找不到在单元 XSuperJSON 的使用子句中命名的正则表达式或 RTTI,所以我猜它在 Delphi 2009 中不起作用(而且我买不起后来的 Delphi 版本)
编辑 - 添加
If Assigned(ParsedJSON ['key2']) then ...
似乎这样做了,但这是正确的方法吗?