[英]Delphi webservice JSON array
我真的是Delphi的新手,我正在做一個關於如何通過delphi輸出JSON數組的實驗。 這對任何人來說聽起來都很簡單,但我只是不知道如何。 我已經創建了一個簡單的程序。
現在,我要執行的操作是使用以下參數創建命令/請求:
http://localhost:8001/hello?json={"names":["Jay","Chris","John"]}
這樣會在瀏覽器中產生如下結果:
{ result: ["Hello Jay","Hello Chris","Hello John"], id: "", time_elapsed: 0 }
請,我真的需要幫助。 有人嗎
編輯:這是我今天做的代碼,但仍然沒有顯示我想要的輸出:
procedure TPrimeJSONMHelloPeople.ProcessJSONRPCRequest(
var ResultValue: TlkJSONbase; var ResultSuccess: Boolean);
var
jsonPeople:TlkJSONlist;
dmPool:TObject;
dm:TPrimeDataModuleBaseDM;
i:integer;
begin
FjsonObj1 := TlkJSONobject.Create;
jsonPeople := FjsonObj1.CreateListValue('names');
jsonPeople.AddVarString('jay');
jsonPeople.AddVarString('ann');
jsonPeople.AddVarString('john');
inherited;
CheckRequiredParameter('names');
PrimeDataModuleWebService.TDataModuleDMCreateInstanceDefault(dmPool);
try
dm := TPrimeDataModuleDefaultDM(dmPool).GetModule;
try
//this part here will loop and output the name
//if jsonPeople <> nil then
if Params.Field['names'] <> nil then
begin
for i := 0 to FjsonObj1.Field['names'].Count - 1 do
begin
ResultValue := TlkJSONlist.Create
end;
end;
ResultValue := TlkJSONlist.Create;
finally
dm.Release;
end;
finally
dmPool.Free;
end;
FjsonObj1.Free;
ResultSuccess := True;
end;
我不知道代碼中缺少什么,它僅顯示:{
result: [ ],
id: "",
time_elapsed: 0
}
而不是: { result: ["Hello Jay","Hello Chris","Hello John"], id: "", time_elapsed: 0 }
我剛剛找到正確的答案。 這是代碼:
procedure TSample1.ProcessJSONRPCRequest(
var ResultValue: TlkJSONbase; var ResultSuccess: Boolean);
var
dmPool:TObject;
dm:TPrimeDataModuleBaseDM;
jsonPeople:TlkJSONlist; //used Tlkjsonlist since I want to create an array
i:integer;
begin
inherited;
jsonPeople:=TlkJSONlist.Create; //create jsonPeople as an array
CheckRequiredParameter('names'); //names parameter needed
PrimeDataModuleWebService.TDataModuleDMCreateInstanceDefault(dmPool);
try
dm := TPrimeDataModuleDefaultDM(dmPool).GetModule;
try
if Params.Field['names'] <> nil then //check if the names parameter is empty
begin
ResultValue:=jsonPeople;
for i := 0 to Params.Field['names'].Count - 1 do
begin
jsonPeople.AddVarString('hello ' + Params.Field['names'].Child[i].value);
end;
end;
finally
dm.Release;
end;
finally
dmPool.Free;
end;
ResultSuccess := True;
end;
end.
該請求為http://localhost/sample1?json={"names":["john","jay"]}
輸出為
{
-
result: [
"hello john"
"hello jay"
]
id: ""
time_elapsed: 0
}
希望這可以幫助使用Delphi創建Web服務請求的新手。
首先,我認為問題中顯示的URI已經被解碼。 您應該在HTTP協議中對URI參數進行編碼。
如果您想創建這種面向HTTP的JSON訪問,請看一下RESTful方法 。 這將幫助您避免重蹈覆轍,並使您的服務器更適合AJAX。
然后,您似乎可以使用第三方lkJSON Delphi庫 ...因此您可以直接從其作者或支持論壇獲得幫助。
從庫的源代碼中,您應該使用TlkJSONlist
實例來處理URI輸入和結果輸出中的JSON數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.