Como converter Json para Dataset? – Show Delphi

DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

Como converter Json para Dataset?

 

Super dica pessoal para quem esta trabalhando com JSON.

montei um método que simplifica e muito a conversão de um JSON
para um ClientDataSet ou FDMemTable, por exemplo.

Vamos direto ao assunto!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
uses
  REST.Response.Adapter, System.JSON;
 
procedure JsonToDataset(aDataset : TDataSet; aJSON : string);
var
  JObj: TJSONArray;
  vConv : TCustomJSONDataSetAdapter;
begin
  if (aJSON = EmptyStr) then
  begin
    Exit;
  end;
 
  JObj := TJSONObject.ParseJSONValue(aJSON) as TJSONArray;
  vConv := TCustomJSONDataSetAdapter.Create(Nil);
 
  try
    vConv.Dataset := aDataset;
    vConv.UpdateDataSet(JObj);
  finally
    vConv.Free;
    JObj.Free;
  end;
end;

Gostou? Veja o exemplo de como é fácil utilizar!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf,
  FireDAC.DApt.Intf, Vcl.StdCtrls, Data.DB, FireDAC.Comp.DataSet,
  FireDAC.Comp.Client, Vcl.Grids, Vcl.DBGrids, Datasnap.DBClient;
 
type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    DBGrid2: TDBGrid;
    DataSource2: TDataSource;
    FDMemTable1: TFDMemTable;
    Button1: TButton;
    ClientDataSet1: TClientDataSet;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
uses
  REST.Response.Adapter, System.JSON;
 
procedure JsonToDataset(aDataset : TDataSet; aJSON : string);
var
  JObj: TJSONArray;
  vConv : TCustomJSONDataSetAdapter;
begin
  if (aJSON = EmptyStr) then
  begin
    Exit;
  end;
 
  JObj := TJSONObject.ParseJSONValue(aJSON) as TJSONArray;
  vConv := TCustomJSONDataSetAdapter.Create(Nil);
 
  try
    vConv.Dataset := aDataset;
    vConv.UpdateDataSet(JObj);
  finally
    vConv.Free;
    JObj.Free;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  MEU_JSON =
  '[{'+
	'"Titulo": "Ate que a sorte nos separe",'+
	'"duracao": "120 min"'+
  '}, {'+
	'"Titulo": "Matrix",'+
	'"duracao": "140 min"'+
  '}]';
begin
  JsonToDataset(FDMemTable1, MEU_JSON);
  JsonToDataset(ClientDataSet1, MEU_JSON);
end;
 
end.

Testes do Delphi XE 7 até o Berlin 10.1 e deverá rodas em outras versões.

Por padrão o Delphi cria os Fields como WideString de 255 caracteres, a dica é
você criar os fields antes de fazer a conversão, então o delphi irá processar
de acordo com o tipo do field.

Sugestões? Dê o seu feedback nos comentários!

Facebook Comments

Posts Relacionados

  • Giovani Da Cruz
  • 1.647 views
  • 1 comentários
  • 24 de março de 2017

 

Publicidade

 

Uma resposta para “Como converter Json para Dataset?”

  1. João disse:

    Tentei no delphi Berlin, mas houve problema com a REST.Response.Adapter. Ocorreu o seguinte erro : [dcc32 Fatal Error] REST.Json.pas(287): F2051 Unit REST.Client was compiled with a different version of REST.Json.TJson.

    Como resolver?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Ir ao topo


© 2017 Infus Soluções em Tecnologia - Todos os Direitos Reservados