鉴于以下两行代码产生相同的输出,这两种方法中哪一种更好?
TJSONArray *resultsArray = (TJSONArray*) response->Get("results")->JsonValue;
TJSONArray *resultsArray = (TJSONArray*) response->GetValue("results");
鉴于以下两行代码产生相同的输出,这两种方法中哪一种更好?
TJSONArray *resultsArray = (TJSONArray*) response->Get("results")->JsonValue;
TJSONArray *resultsArray = (TJSONArray*) response->GetValue("results");
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
,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()
而不是Get()->JsonValue
.