JsonArray em Client Delphi
28/01/2016
0
Boa noite pessoal,
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
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
+ 0
Responder
Post mais votado
29/01/2016
Amigo segue um exemplo simples, eu fiz em Delphi 2007 e utilizei a biblioteca LkJSON. Mas é apenas uma idéia para poder te ajudar ou abrir a mente para o seu problema. Aqui eu passo 2 parâmetros para o web services e ele me retorna um json.
Eu não estou usando ClientDataSet, mas fica muito simples você adaptar para armazenar o retorno. Veja:
Segue a estrutura JSON para este exemplo:
Como disse, as vezes não é 100% a solução que você precisa, mas acredito que possa ajudar a pensar.
Abração.. Att.
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
Responder
Mais Posts
29/01/2016
Gabriel Baltazar
Amigo, já fiz isso.
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.
ou
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;
Responder
29/01/2016
Hugo Silva
Pessoal muito obrigado, com as dicas de vocês consegui resolver meu problema.
Responder
Clique aqui para fazer login e interagir na Comunidade :)