【发布时间】:2020-08-24 13:09:11
【问题描述】:
我正在使用 Indy 调用第 3 方 API
var loRespJson: TMemoryStream;
IdHTTP1.GET(lsURL, loRespJson)
它返回一个 JSON 数组:
[
{
"Active": "1",
"SourceId": "215",
"SourceName": "MyVal1"
},
{
"Active": "1",
"SourceId": "383",
"SourceName": "MyVal2"
}
]
反过来,我的函数会创建一个新的 JSON 对象,添加附加信息和响应,然后将其返回给调用程序。期望的结果:
{
"responseCode":"200",
"companyNo":"0268895",
"responseMessage": [
{
"Active": "1",
"SourceId": "215",
"SourceName": "MyVal1"
},
{
"Active": "1",
"SourceId": "383",
"SourceName": "MyVal2"
}
]
}
我怎样才能实现上述目标?如果我使用以下添加,它会在数组周围创建“”(引号),这在解析 JSON 时是一个大问题:
loJSon.AddPair(TJSONPair.Create('responseCode', IntToStr(idHttp1.ResponseCode)));
loJSon.AddPair(TJSONPair.Create('companyNo', CompanyNo));
if idHttp1.ResponseCode = 200 then
begin
lsRespMsg := StreamToString(loRespJSon);
liSuper := SO(lsRespMsg);
loJSon.AddPair(TJSONPair.Create('responseMessage', liSuper.AsJSon()));
…
我也尝试过遍历 JSON 数组,但该选项在每个数组项周围添加了“”
{ create an json-array }
loJSA := TJsonArray.Create();
{ add array to object }
loJSP := TJSONPair.Create('responseMessage', loJSA);
loJSon.AddPair(loJSP);
if liSuper.IsType(stArray) then
begin
for i := 0 to liSuper.AsArray.Length - 1 do
begin
loSubscription := liSuper.AsArray[i];
loJSA.Add(loSubscription.AsJSon());
end;
end;
任何帮助将不胜感激!谢谢。
【问题讨论】:
-
您正在混合使用 2 个不同的库来处理 JSON - SuperObject 和 System.JSON。选择一个作为一个好的开始。
标签: json delphi delphi-2010