2015-05-19 3 views
5

у меня есть это:Delphi XE7 DataSnap с чистым 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; 

Все отлично, «the_list()» получит все необходимые данные из моего выбора и, наконец, у меня будет результат. Некоторые клиенты Java соединится доступа к что-то вроде: http://localhost:8080/datasnap/rest/Tws/listJSON/123

Чтобы сделать попытку, я установил расширение Chrome под названием Advanced Client Rest, и я получаю такой результат:

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

после внести некоторые изменения в TWebModule1.DSHTTPWebDispatcher1FormatResult();

Кажется, это сжатые данные JSON, и, насколько я знаю, Java может справиться с этим, но я не уверен, и я предпочел бы несжатый и чистый вывод JSON. Я знаю, что использование mORMOt может сделать трюк, но я хотел бы попробовать, поскольку для использования mORMOt мы должны многому научиться.

Можно ли это сделать, вывести чистый JSON, используя сервер RAD Datasnap? Возможно, все абсолютно правильно, и я просто не знаю ...

+0

Эй, у вас есть любой успех? У меня такая же проблема. –

+0

Вы все еще используете XE7? Я ушел с XE7 для этого, и, возможно, самая новая версия могла бы выполнить эту работу. – Magno

ответ

2

Я не думаю, что это сработает, я полагаю, вам нужны устройства Delphi для использования FireDacJsonreflect.

Можно сделать вывод Json себя, увидеть этот маленький пример, я использую Comany из примера DB только 3 поля в ClientDataSet, вы будете probobly сделать его немного более сложным, а также другие Структуры я думаю

Просто идея ..

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; 

Это должно дать результат, как "результат"

{: [{ "Поля": [{ "Field0": "CustNo"}, { "Field1":» Company "}, {" Field2 ":" Страна "}]," record-1 ": [{" 0 ":" 1221 "}, {" 1 ":" Kauai Dive Shoppe "}, {" 2 ":" США "}]," выздоровеет й-2 ": [{" 0 ":" один тысяча двести тридцать один "}, {" 1 ":" Unisco "}, {" 2 ":" Багамы "}]," запись-3 ": [{" 0 ":" 1351 "}, {" 1 ":" Sight Diver "}, {" 2 ":" Cyprus "}]," record-4 ": [{" 0 ":" 1354 "}, {" 1 ":" Cayman Divers World Unlimited "}, {" 2 ":" Британские Вест-Индии "}]," record-5 ": [{" 0 ":" 1356 "}, {" 1 ":" Центр подводного плавания Тома Сойера "}, { «2»: «Американские Виргинские острова»}], «запись-6»: [{«0»: «1380»}, {«1»: «Центр аква Blue Jack»}, {"2": "США" }], «record-7»: [{«0»: «1384»}, {«1»: «VIP Divers Club»}, {«2»: «Виргинские острова США»}], «запись-8», : [{"0": "1510"}, {"1": "Ocean Paradise"}, {"2": "US"}], "record-9": [{"0": "1513"} , {"1": "Fantastique Aquatica"}, {"2": "Columbia"}], "record-10": [{"0": "1551"}, {"1": "Клуб Marmot Divers Club" }, {"2": "Canada"}], "record-11": [{"0": "1560"}, {"1": "The Depth Charge"}, {"2": "US" }], "record-12": [{"0": "1563"}, {"1": "Синий спорт"}, {"2": "US"}], "record-13": [{ «0»: «1624»}, {«1»: «Клуб Makai SCUBA»}, {"2": "US"}], "record-14": [{"0": "1645"}, { «1»: «Action Club»}, {«2»: «US»}], «record-15»: [{"0": "1651"}, {"1": "Центр Ямайки SCUBA"}, {"2": "Вест-Индия"}], "record-16": [{"0": "1680"}, {"1": "Island Finders"} , { "2": "США"}], "запись-17": [{ "0": "1984"}, { "1": "Приключения Undersea"}

+0

Спасибо. Я попробую на основе вашего предложения и отчитаюсь здесь. – Magno

+0

Привет, еще один способ - создать класс и заполнить его данными и экспортировать класс в Json, посмотрите на эту ссылку. http://firemonkeytutorial.com/using-model-view-viewmodel-mvvm-delphi-firemonkey/ и это http://blogs.embarcadero.com/stephenball/2014/06/05/how-to-convert-an- объектно-к-и JSON-защитник-с-однолинейной-оф-кода / – 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; 
Смежные вопросы