0

私は 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 }

4

2 に答える 2

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

}

これが、delphiを使用してWebサービスリクエストを作成するのが初めての人に役立つことを願っています。

于 2011-06-24T02:43:54.327 に答える
0

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

このような HTTP 指向の JSON アクセスを作成する場合は、RESTful アプローチをご覧ください。これは、井戸を再発明する必要がなく、サーバーをより AJAX 対応にするのに役立ちます。

次に、サードパーティの lkJSON Delphi ライブラリを使用しているようです...そのため、その作成者またはサポート フォーラムから直接ヘルプを得ることができます。

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

于 2011-06-21T05:53:23.933 に答える