2015-05-19 20 views
5

Tôi có điều này:Delphi XE7 Datasnap với JSON tinh khiết

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; 

Tất cả tốt, "the_list()" sẽ nhận được tất cả các dữ liệu cần thiết từ chọn của tôi và cuối cùng tôi sẽ có kết quả. Một số khách hàng Java sẽ kết nối truy cập vào một cái gì đó như: http://localhost:8080/datasnap/rest/Tws/listJSON/123

Để thực hiện một thử, tôi đã cài đặt một mở rộng Chrome gọi là Advanced Nghỉ ngơi Client, và tôi nhận được kết quả như vậy:

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

sau khi thực hiện một số thay đổi trong TWebModule1.DSHTTPWebDispatcher1FormatResult();

Nó có vẻ là một dữ liệu JSON nén và theo như tôi biết, Java có thể xử lý điều đó, nhưng tôi không chắc chắn và tôi muốn có một đầu ra JSON không nén và tinh khiết. Tôi biết rằng bằng cách sử dụng mORMOt có thể làm các trick nhưng tôi muốn cung cấp cho một thử, như sử dụng mORMOt chúng ta nên tìm hiểu rất nhiều.

Có thể thực hiện điều đó, xuất JS thuần túy, bằng cách sử dụng máy chủ RAD Datasnap không? Có lẽ tất cả mọi thứ là hoàn toàn chính xác và tôi chỉ không biết ...

+0

Xin chào, bạn có bất kỳ thành công nào? Tôi gặp vấn đề tương tự. –

+0

Bạn vẫn đang sử dụng XE7? Tôi bỏ với XE7 cho điều đó và có lẽ phiên bản mới nhất có thể thực hiện công việc. – Magno

Trả lời

2

Tôi không nghĩ rằng nó sẽ làm việc, tôi giả sử bạn cần đơn vị Delphi sử dụng FireDacJsonreflect.

Bạn có thể làm cho sản lượng Json chính mình, xem ví dụ nhỏ này tôi sử dụng comany từ ví dụ DB chỉ có 3 trường trong một clientdataset, bạn sẽ probobly làm cho nó phức tạp hơn một chút, và cũng structur khác Tôi đoán

chỉ cần một ý tưởng ..

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; 

Điều này sẽ cho một kết quả như

{ "kết quả": [{ "Fields": [{ "Field0": "CustNo"}, { "Field1":" Công ty "}, {" Trường 2 ":" Quốc gia "}]," bản ghi-1 ": [{" 0 ":" 1221 "}, {" 1 ":" Kauai Dive Shoppe "}, {" 2 ":" US "}]," reco rd-2 ": [{" 0 ":" 1231 "}, {" 1 ":" Unisco "}, {" 2 ":" Bahamas "}]," bản ghi-3 ": [{" 0 ":" 1351 "}, {" 1 ":" Diver Sight "}, {" 2 ":" Síp "}]," bản ghi-4 ": [{" 0 ":" 1354 "}, {" 1 ":" Cayman Divers World Unlimited "}, {" 2 ":" British West Indies "}]," record-5 ": [{" 0 ":" 1356 "}, {" 1 ":" Trung tâm lặn Tom Sawyer "}, { "2": "Quần đảo Virgin thuộc Hoa Kỳ"}], "record-6": [{"0": "1380"}, {"1": "Blue Jack Aqua Center"}, {"2": "Hoa Kỳ" }], "record-7": [{"0": "1384"}, {"1": "Câu lạc bộ VIP Divers"}, {"2": "Quần đảo Virgin thuộc Hoa Kỳ"}], "kỷ lục-8" : [{"0": "1510"}, {"1": "Ocean Paradise"}, {"2": "US"}], "bản ghi-9": [{"0": "1513"} , {"1": "Fantastique Aquatica"}, {"2": "Columbia"}], "bản ghi-10": [{"0": "1551"}, {"1": "Câu lạc bộ lặn Marmot" }, {"2": "Canada"}], "bản ghi-11": [{"0": "1560"}, {"1": "Phí độ sâu"}, {"2": "Hoa Kỳ" }], "record-12": [{"0": "1563"}, {"1": "Thể thao xanh"}, {"2": "Hoa Kỳ"}], "bản ghi-13": [{ "0": "1624"}, {"1": "Câu lạc bộ Makai SCUBA"}, {"2": "Hoa Kỳ"}], "bản ghi-14": [{"0": "1645"}, { "1": "Câu lạc bộ hành động"}, {"2": "Hoa Kỳ"}], "bản ghi-15": [{"0": "1651"}, {"1": "Trung tâm Jamaica SCUBA"}, {"2": "Tây Ấn"}], "bản ghi-16": [{"0": "1680"}, {"1": "Người tìm đảo"} , {"2": "Hoa Kỳ"}], "bản ghi-17": [{"0": "1984"}, {"1": "Phiêu lưu dưới đáy biển"}

+0

Cảm ơn bạn. Tôi sẽ thử dựa trên đề xuất của bạn và báo cáo lại tại đây. – Magno

+0

Xin chào, một cách khác là tạo một lớp và điền nó với dữ liệu và xuất lớp học sang Json có xem liên kết này. http://firemonkeytutorial.com/using-model-view-viewmodel-mvvm-delphi-firemonkey/ và http://blogs.embarcadero.com/stephenball/2014/06/05/how-to-convert-an- đối tượng-to-json-và-back-với-một-dòng-of-code / – 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; 
Các vấn đề liên quan