鉴于以下两行代码产生相同的输出,这两种方法中的哪一种更好的做法?
TJSONArray *resultsArray = (TJSONArray*) response->Get("results")->JsonValue;
TJSONArray *resultsArray = (TJSONArray*) response->GetValue("results");
答案 0 :(得分:1)
GetValue()
在功能上与调用Get()->JsonValue
相同,但在访问JsonValue
之前需要额外检查以确保所请求的密钥确实存在。
TJSONObject
有一个受保护的GetPairByName()
方法,如果找到,则返回指向所请求密钥的TJSONPair
对象的指针,如果找不到密钥则返回NULL
。
Get()
只需调用GetPairByName()
并按原样返回指针:
function TJSONObject.Get(const Name: string): TJSONPair;
begin
Result := GetPairByName(Name);
end;
如果您确定该密钥存在,则使用Get()->JsonValue
非常安全。但是,如果密钥可能不存在,您需要在访问任何NULL
成员之前检查TJSONPair
的返回值。
GetValue()
调用GetPairByName()
并仅在找到密钥时返回返回的JsonValue
的{{1}},否则返回TJSONPair
:
NULL
如果密钥可能不存在,则拨打function TJSONObject.GetValue(const Name: string): TJSONValue;
var
LPair: TJSONPair;
begin
LPair := GetPairByName(Name);
if LPair <> nil then
Result := LPair.JSONValue
else
Result := nil;
end;
而不是GetValue()
更为清晰。