BDu*_*rte 1 delphi response firemonkey
我需要获取包含以下 JSONsubitem1的 a 的值:LResponse
"Information": {
"subitem1": "2011",
"subitem2": "Test"
}
Run Code Online (Sandbox Code Playgroud)
我正在使用此代码来获取其他值,它运行良好,但是当我尝试获取Information, subitem1or时subitem2,它返回一个空值。
var
LClient: TRESTClient;
LRequest: TRESTRequest;
LResponse: TRESTResponse;
begin
LClient := TRESTClient.Create(URL_API);
try
LRequest := TRESTRequest.Create(LClient);
try
LResponse := TRESTResponse.Create(LClient);
try
LRequest.Client := LClient;
LRequest.Response := LResponse;
LRequest.Method := rmGET;
LRequest.Params.AddHeader('Authorization','Bearer '+FToken);
LRequest.Params.ParameterByName('Authorization').Options := [poDoNotEncode];
LRequest.Params.AddHeader('Accept', 'application/json');
LRequest.Execute;
LResponse.GetSimpleValue('subitem1', FLogradouro);
{ ... }
Run Code Online (Sandbox Code Playgroud)
GetSimpleValue只能读取响应中 JSON 的顶级属性。它的效率也非常低,因为它在每次调用该方法时都会解析 JSON。
TRESTResponse已经允许您通过其JSONValue属性访问已解析的 JSON。它允许您使用 JSON 路径查询整个结构中的值。访问JSONValue属性只会解析一次响应,但请注意,如果响应为空或不是有效的 JSON,它可能会返回 nil。
另一点是你不必TRestResponse自己创建。它是在 中自动创建的LRequest.Execute。也就是说,访问返回的 JSON 中的值的代码将是:
if not Assigned(LRequest.Response.JSONValue) then
raise Exception.Create('Invalid response.');
ShowMessage(LRequest.Response.JSONValue.GetValue<string>('Information.subitem1'));
Run Code Online (Sandbox Code Playgroud)
您可以在 JSON 路径中使用方括号作为数组访问器来按索引访问项目:
LRequest.Response.JSONValue.GetValue<string>('SomeStrings[0]');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |