2011-06-21 12 views
0

私はDelphiを初めてお使いになり、delphiを使用してJSON配列を出力する方法を実験しています。これは誰にでも簡単に聞こえるかもしれませんが、私はちょっと知りません。私はすでにシンプルなプログラムを作りました。このようなブラウザで結果を作成しますDelphi webservice JSON array

http://localhost:8001/hello?json={"names":["Jay","Chris","John"]} 

{ result: ["Hello Jay","Hello Chris","Hello John"], id: "", time_elapsed: 0 }

ください

さて、私は何をしたいのようなパラメータを指定して、コマンド/リクエストを作成することです、私は本当にこれに助けが必要です。誰ですか?

EDIT: これは私がちょうど今日やったコードですが、それはまだ私の所望の出力は表示されません:

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 }

+0

コードに「Hello」が表示される場所はありません。そして、 'ResultValue:= TlkJSONlist.Create;'はN回実行されますが、上書きされます。 – mjn

+0

はい、ありがとうございます。私はすでにコードを持っています。それをすべてに分かち合いましょう。 :) – jayAnn

答えて

1

私はちょうど正しい答えを見つけました。ここではコードです:

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 

} 

であるが、これはデルファイを使用してWebサービス要求を作成するには新しいです誰かを助けることができると思います。

0

まず、あなたの質問に表示されたあなたのURIはすでにデコードされていると思います。 HTTPプロトコルでURIパラメータをエンコードする必要があります。

このようなHTTP指向のJSONアクセスを作成する場合は、RESTful approachをご覧ください。それはあなたがうまく再考するのを助け、あなたのサーバをより多くのAJAXが準備できるようにするのに役立ちます。

次に、third-party lkJSON Delphi libraryを使用しているようです。そのため、作成者またはサポートフォーラムから直接助けを受けることができます。

ライブラリのソースコードから、TlkJSONlistインスタンスを使用して、URI入力と結果出力の両方からJSON配列を処理する必要があります。

+0

ありがとうございます。私はちょうどTlkJSONlistについて知っていた。しかし、私はそれを使用する方法がわかりません...サンプルコードは非常に高く評価されるでしょう。 – jayAnn

+0

http://www.progdigy.com/?page_id=6 –

+0

のように、文書化され、サポートされている別のライブラリを使用してください。しかし、私は他のライブラリを使用することはできません。 :)多分私はそれを把握する必要があります。私は本当に立ち往生している。 :) – jayAnn