Fórum JsonArray em Client Delphi #544014
28/01/2016
0
estou estudando servidor Datasnap com Delphi XE6 e me deparei com um problema.
Fiz um servidor utilizando Rest/Json.
E na aplicação Client utilizei o IdHTTP para coletar os dados.
No servidor tenho um método que retorna um JsonArray, ele está funcionando normal, pois consigo visualizar os dados via web acessando o método diretamente.
No Client eu uso o método IdHttp.Get('endereço do servidor', StringStream), o resultado armazeno em uma variável do tipo StringStream, o retorno ocorre com sucesso, porém gostaria de saber se teria como eu converter esse StringStrem em JsonArray novamente para eu poder fazer o UnMarshal e exibir os dados.
Os dados vou exibir em um DBGrid com ClientDataSet e DataSource
Hugo Silva
Curtir tópico
+ 0Post mais votado
29/01/2016
Eu não estou usando ClientDataSet, mas fica muito simples você adaptar para armazenar o retorno. Veja:
procedure TForm.NomeProcedure(Param1,Param2:String);
Var
i: integer;
Consulta, ArrayObjetos: TStringList;
Resposta: TStringStream;
JSon: TlkJSONobject;
JSArray: TlkJSONlist;
Var1,Var2,Var3,Var4: TlkJSONbase;
begin
ArrayObjetos := TStringList.Create;
Consulta := TStringList.Create;
Resposta := TStringStream.Create('');
Consulta.Values['parametro1'] := Param1;
Consulta.Values['parametro2'] := Param2
IdHTTP1.Post(LinkdoWebService, Consulta, Resposta); // utilizei o metodo POST
JSon := TlkJSON.ParseText(Resposta.DataString) as TlkJSONobject;
Var1 := JSon.Field['variavel_1'];
Var2 := JSon.Field['variavel_2'];
Var3 := JSon.Field['variavel_3'];
Var4 := JSon.Field['variavel_4'];
FreeAndNil(Resposta);
FreeAndNil(Consulta);
JSArray := JSon.Field['variavel_5'] as TlkJSONlist;
for i:=0 to JSArray.count-1 do
ArrayObjetos.Add(VarToStr(JSArray.Child[i].Field['nome'].Value) +'='+ VarToStr(JSArray.Child[i].Field['valor'].Value)); // essa linha você ira alimentar o seu ClientDataSet
end;
Segue a estrutura JSON para este exemplo:
{
"variavel_1": 0,
"variavel_2": false,
"variavel_3": "Operação realizada com sucesso!",
"variavel_4": "SAX",
"variavel_5": [
{
"nome": "COMPRA",
"valor": true
},
{
"nome": "CONTABIL",
"valor": true
},
{
"nome": "CRM",
"valor": true
}
]
}
Como disse, as vezes não é 100% a solução que você precisa, mas acredito que possa ajudar a pensar.
Abração.. Att.
Singular Ti
Gostei + 1
Mais Posts
29/01/2016
Gabriel Baltazar
Eu passo o StringStream pra String e converto pra JsonArray ou JsonObject.
Não lembro bem o código de cabeça, mas é mais ou menos isso.
json := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(strJson), 0) as TJSONArray;
ou
json := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(strJson), 0) as TJSONObject;
Gostei + 0
29/01/2016
Hugo Silva
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)