1

TDatasetJSONヘルパー関数があります。

結果を返したいのですが、次のようになります。

{"result":[{"rid":"2","firstname":"veli","lastname":"deli"},{"rid":"1","firstname":"ismail","lastname":"kocacan"}]}

しかし、動作しません。次を返します。

{"result":[[{"rid":"2","firstname":"veli","lastname":"deli"},{"rid":"1","firstname":"ismail","lastname":"kocacan"}]]}

余分な[文字を削除したい...

このデータを抽出して返す方法は?

{"rid":"2","firstname":"veli","lastname":"deli"},{"rid":"1","firstname":"ismail","lastname":"kocacan"}

私のTDatasetJSONヘルパー関数:

 TDatasetJSONHelper = class helper for TDataset
  public
    function ToJSONData: TJSONArray;
    function ToJSONDataWrapper: TJSONValue;
  end;

function TDatasetJSONHelper.ToJSONData: TJSONArray;
var
  jso: TJSONObject;
  jsa: TJSONArray;
  jsp: TJsonPair;
  J: Integer;
  avalue: TJSONValue;
begin
  Self.Close;
  Self.Open;
  jsa := TJSONArray.Create();
  while not Self.Eof do
  begin
    jso := TJSONObject.Create();
    for J := 0 to FieldCount - 1 do
      jso.AddPair(TJsonPair.Create(Fields[J].DisplayName, Fields[J].Value));
    jsa.AddElement(jso);
    Self.Next;
  end;
  Self.Close;
  Result := jsa;
end;


function TDatasetJSONHelper.ToJSONDataWrapper: TJSONValue;
var
  aJSON: TJSONObject;
  apair: TJsonPair;
  avalue: TJSONValue;
begin
  aJSON := TJSONObject.ParseJSONValue
    (TEncoding.ASCII.GetBytes
    ('{"result":[[{"rid":"2","firstname":"veli","lastname":"deli"},{"rid":"1","firstname":"ismail","lastname":"kocacan"}]]}'),
    0) as TJSONObject;

  apair := aJSON.Get(0);
  avalue := apair.JsonValue;

  // ??? avalue := '{"rid":"2","firstname":"veli","lastname":"deli"},{"rid":"1","firstname":"ismail","lastname":"kocacan"}';
  Result := avalue;
end;






function TServerMethods1.GetPersonList: TJSONArray;
begin
  Result := dm.AdoQuery1.ToJSONData;
end;

function TServerMethods1.GetPersonList2: TJSONValue;
begin
  Result := dm.AdoQuery1.ToJSONDataWrapper;
end;

どうすればこの問題を解決できますか?

4

2 に答える 2

2

GetInvocationMetadata()。ResponseCode:= 200;

GetInvocationMetadata()。ResponseContent:='{"rid": "2"、 "firstname": "veli"、 "lastname": "deli"}、{"rid": "1"、 "firstname": "ismail" 、"lastname": "kocacan"}';

于 2014-01-05T11:26:47.423 に答える
2

参考までに、オープンソースリポジトリに、より完全で高速な機能を追加しました。

これはmORMotフレームワークの一部ですが、他の機能に関連付けられることなく、スタンドアロンユニットとして使用できます。

SynVirtualDataSet.pasを参照してください:

function DataSetToJSON(Data: TDataSet): RawUTF8 

このコミット関連するフォーラムスレッドを参照してください。

于 2014-05-18T10:52:23.767 に答える