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 // 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; end; end.