2015-05-19 13 views
5

mam to:Delphi XE7 DataSnap czystą JSON

function TWS.listJSON(const id: integer): TJSONObject; 
var LDataSets: TFDJSONDataSets; 
begin 
    LDataSets := the_list(id); //the_list:TFDJSONDataSets 
    try 
     Result := TJSONObject.Create; 
     TFDJSONInterceptor.DataSetsToJSONObject(LDataSets, Result); 
    finally 
     LDataSets.Free; 
    end; 
end; 

wszystko jest w porządku "the_list()" dostanie wszystkie potrzebne dane z moim wybierz i wreszcie będę miał wynik. Niektórzy klienci Java połączy dostępu coś takiego: http://localhost:8080/datasnap/rest/Tws/listJSON/123

Aby uczynić spróbować, ja zainstalowaniu Chrome Rozszerzenie o nazwie Zaawansowane Rest klienta i uzyskać taki wynik:

{"list":"QURCUw4AAADGAQAA\/wABAAH\/Av8DBAAO...."} 

po dokonać pewnych zmian w TWebModule1.DSHTTPWebDispatcher1FormatResult();

Wydaje się, że jest to skompresowane dane JSON i o ile wiem, Java może sobie z tym poradzić, ale nie jestem pewien i wolałbym nieskompresowane i czyste wyjście JSON. Wiem, że użycie mORMOt może zdziałać, ale chciałbym spróbować, aby użyć mORMOt, powinniśmy wiele się nauczyć.

Czy można to zrobić, wyprowadzić czysty JSON, używając serwera RAD Datasnap? Może wszystko jest absolutnie poprawne i po prostu nie wiem ...

+0

Hej, mają jakiś sukces? Mam ten sam problem. –

+0

Czy nadal używasz XE7? Zrezygnowałem z XE7 i być może najnowsza wersja mogłaby wykonać to zadanie. – Magno

Odpowiedz

2

Nie sądzę, że to zadziała, zakładam, że potrzebujesz jednostek Delphi do użycia FireDacJsonreflect.

Można zrobić wyjście samemu JSON zobaczyć ten mały przykład używam comany z przykładu DB tylko 3 pola w clientdataset będziesz probobly zrobić to trochę bardziej skomplikowane, a także inny structur Chyba

tylko pomysł ..

function TServerMethods1.JsonDB: TJSONObject; // Hold the array 
var 
i  : Integer; 
JsonArray: TJSONArray; 
record_number : Integer; 

begin 
result:=TJSONObject.Create; 

// Field names 
JsonArray:=TJSONArray.Create; 
ClientDataSet1.First; 
for i := 0 to ClientDataSet1.Fields.Count-1 do 
Begin 
    JsonArray.AddElement(TJSONObject.Create(TJSONPair.Create('Field'+I.ToString ,ClientDataSet1.Fields[i].FieldName))); 
End; 
    Result.AddPair('Fields',JsonArray); 

//Data 
record_number:=0; 
while not ClientDataSet1.Eof do 
Begin 
    inc(record_number); 
    JsonArray:=TJSONArray.Create; 
    for i := 0 to ClientDataSet1.Fields.Count-1 do 
    Begin 
    JsonArray.AddElement(TJSONObject.Create(TJSONPair.Create(I.ToString,ClientD ataSet1.Fields[i].Asstring))); 
    End; 
    Result.AddPair('record-'+record_number.ToString,JsonArray); 
    ClientDataSet1.Next; 
End; 

end; 

To powinno dać efekt podobny

{ "wynik": [{ "Fields": [{ "Field0": "CustNo"}, { "Pole1":” Firma "}, {" Field2 ":" Country "}]," record-1 ": [{" 0 ":" 1221 "}, {" 1 ":" Kauai Dive Shoppe "}, {" 2 ":" US "}]," reco rd-2 ": [{" 0 ":" 1231 "}, {" 1 ":" Unisco "}, {" 2 ":" Bahamas "}]," record-3 ": [{" 0 ":" 1351 "}, {" 1 ":" Sight Diver "}, {" 2 ":" Cyprus "}]," record-4 ": [{" 0 ":" 1354 "}, {" 1 ":" Cayman Divers World Unlimited "}, {" 2 ":" British West Indies "}]," record-5 ": [{" 0 ":" 1356 "}, {" 1 ":" Tom Sawyer Diving Center "}, { "2": "Wyspy Dziewicze Stanów Zjednoczonych"}], "rekord-6": [{"0": "1380"}, {"1": "Centrum Blue Jack Aqua"}, {"2": "US" }], "rekord-7": [{"0": "1384"}, {"1": "Klub nurków VIP"}, {"2": "Wyspy Dziewicze Stanów Zjednoczonych"}], "rekord-8" : [{"0": "1510"}, {"1": "Ocean Raj"}, {"2": "US"}], "rekord-9": [{"0": "1513"} , {"1": "Fantastique Aquatica"}, {"2": "Columbia"}], "record-10": [{"0": "1551"}, {"1": "Klub Świstaków Marmota" }, {"2": "Kanada"}], "rekord-11": [{"0": "1560"}, {"1": "Głębokość"}, {"2": "USA" }], "rekord-12": [{"0": "1563"}, {"1": "Blue Sports"}, {"2": "US"}], "rekord-13": [{ "0": "1624"}, {"1": "Klub Makau SCUBA"}, {"2": "USA"}], "rekord-14": [{"0": "1645"}, { "1": "Action Club"}, {"2": "US"}], "record-15": [{"0": "1651"}, {"1": "Jamajka SCUBA Center"}, {"2": "West Indies"}], "record-16": [{"0": "1680"}, {"1": "Wyspy Finders"} { "2", "us"}] "rekord 17" [{ "0", "1984"}, { "1": "przygoda podwodne"}

+0

Dziękuję. Wypróbuję na podstawie twojej sugestii i zgłoś się tutaj. – Magno

+0

Cześć, innym sposobem jest stworzenie klasy i wypełnienie jej danymi, a następnie wyeksportowanie klasy do Json. http://firemonkeytutorial.com/using-model-view-viewmodel-mvvm-delphi-firemonkey/ i http://blogs.embarcadero.com/stephenball/2014/06/05/how-to-convert-an- object-to-json-and-back-with-a-single-line-of-kod / – bsw

0
procedure TWebModuleServer.DSHTTPWebDispatcher1FormatResult(Sender: TObject; 
    var ResultVal: TJSONValue; const Command: TDBXCommand; var Handled: Boolean); 
var 
JSONValue: TJSONValue; 
begin 
    if Command.Text = 'TServerMethodsServer.GetVendas' then 
    begin 
     Handled := True; 
     JSONValue := ResultVal; 
     ResultVal := TJSONArray(JSONValue).Get(0); 
     TJSONArray(JSONValue).Remove(0); 
     JSONValue.Free; 
    end; 
end; 
Powiązane problemy