簡體   English   中英

Delphi Web服務JSON數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM