使用哪种JSON方法更好:Get()或GetValue()?

时间:2018-03-19 15:07:37

标签: json c++builder-10.1-berlin

鉴于以下两行代码产生相同的输出,这两种方法中的哪一种更好的做法?

TJSONArray *resultsArray = (TJSONArray*) response->Get("results")->JsonValue;

TJSONArray *resultsArray = (TJSONArray*) response->GetValue("results");

1 个答案:

答案 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()更为清晰。