I have found the example from lazarus wiki.
```fpc=fpc3.2-fixed lazarus=master
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBCtrls, DBGrids, DB,
fpjson, fpjsondataset;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
private
JSONDataSet: TJSONDataSet;
end;
var
Form1: TForm1;
const
// this is the sample JSON data used in the demo
JSON_STRING = '[' +
'{"Author ID":"409-56-7008","Last Name":"Bennet","First Name":"Abraham","Active": False},'
+ '{"Author ID":"213-46-8915","Last Name":"Green","First Name":"Marjorie","Active": True}'
+ ']';
implementation
{$R *.lfm}
procedure TForm1.FormCreate(Sender: TObject);
var
Data: TJSONArray;
begin
DBGrid1.AutoFillColumns := True;
// parse the JSON string
Data := GetJSON(JSON_STRING) as TJSONArray;
// create a new TJSONDataSet
JSONDataSet := TJSONDataSet.Create(Self);
// you'll need to create the FieldDefs manually
// ftString requires a length specified
JSONDataSet.FieldDefs.Add('Author ID', ftString, 11, True);
JSONDataSet.FieldDefs.Add('Last Name', ftString, 40);
JSONDataSet.FieldDefs.Add('First Name', ftString, 20);
JSONDataSet.FieldDefs.Add('Active', ftBoolean);
// set OwnsData to True, and the JSON data will be destroyed when the dataset is destroyed
JSONDataSet.OwnsData := True;
// the JSON data is an array of objects
JSONDataSet.RowType := rtJSONObject;
// assign the JSON data to the dataset
JSONDataSet.Rows := Data;
// activate the dataset
JSONDataSet.Active := True;
// assign the dataset to the datasource
DataSource1.DataSet := JSONDataSet;
DBGrid1.Refresh; {Refresh last. DBGrid1 show nothing. bug must be.}
end;
end.
```
Wiki url is:
https://wiki.freepascal.org/fpjsondatasetAlso there is something wrong with DBGrid, DataSource and JSonDataSet components. This demo, DBGrid1 show nothing.