Let's look at the following steps:
- Create a new VCL application and drop in three TButton and a TMemo. Align all the buttons as a toolbar at the top of the form and the memo to all the remaining from client areas.
- From left to right, name the buttons btnGenerateJSON, btnModifyJSON, and btnParseJSON.
- We'll use static data as our data source. A simple matrix is enough for this recipe. Just after the start of the implementation section of the unit, write the following code:
type
TCarInfo = (
Manufacturer = 1,
Name = 2,
Currency = 3,
Price = 4);
var
Cars: array [1 .. 4] of
array [Manufacturer .. Price] of string = (
('Ferrari','360 Modena','EUR', '250000'),
('Ford', 'Mustang', 'USD', '80000'),
('Lamborghini', 'Countach', 'EUR','300000'),
('Chevrolet', 'Corvette', 'USD', '100000')
);
- TMemo is used to show our JSON files and our data. To keep things clear, create a public property called JSON on the form and map its setter and getter to the Memo1.Lines.Text property. Use the following code:
//...other form methods declaration
private
procedure SetJSON(const Value: String);
function GetJSON: String;
public
property JSON: String read GetJSON write SetJSON;
end;
//...then in the implementation section
function TMainForm.GetJSON: String;
begin
Result := Memo1.Lines.Text;
end;
procedure TMainForm.SetJSON(const Value: String);
begin
Memo1.Lines.Text := Value;
end;
- Now, create event handlers for each button and write the code that follows. Pay attention to the event names:
procedure TMainForm.btnGenerateJSONClick(Sender: TObject);
var
i: Integer;
JSONCars: TJSONArray;
Car, Price: TJSONObject;
begin
JSONCars := TJSONArray.Create;
try
for i := Low(Cars) to High(Cars) do
begin
Car := TJSONObject.Create;
JSONCars.AddElement(Car);
Car.AddPair('manufacturer',
Cars[i][TCarInfo.Manufacturer]);
Car.AddPair('name', Cars[i][TCarInfo.Name]);
Price := TJSONObject.Create;
Car.AddPair('price', Price);
Price.AddPair('value',
TJSONNumber.Create(
Cars[i][TCarInfo.Price].ToInteger));
Price.AddPair('currency',
Cars[i][TCarInfo.Currency]);
end;
JSON := JSONCars.ToJSON;
finally
JSONCars.Free;
end;
end;
procedure TMainForm.btnModifyJSONClick(Sender: TObject);
var
JSONCars: TJSONArray;
Car, Price: TJSONObject;
begin
JSONCars := TJSONObject.ParseJSONValue(JSON)
as TJSONArray;
try
Car := TJSONObject.Create;
JSONCars.AddElement(Car);
Car.AddPair('manufacturer', 'Hennessey');
Car.AddPair('name', 'Venom GT');
Price := TJSONObject.Create;
Car.AddPair('price', Price);
Price.AddPair('value', TJSONNumber.Create(600000));
Price.AddPair('currency', 'USD');
JSON := JSONCars.ToJSON;
finally
JSONCars.Free;
end;
end;
procedure TMainForm.btnParseJSONClick(Sender: TObject);
var
JSONCars: TJSONArray;
i: Integer;
Car, JSONPrice: TJSONObject;
CarPrice: Double;
s, CarName, CarManufacturer, CarCurrencyType: string;
begin
s := '';
JSONCars := TJSONObject.ParseJSONValue(JSON)
as TJSONArray;
if not Assigned(JSONCars) then
raise Exception.Create('Not a valid JSON');
try
for i := 0 to JSONCars.Count - 1 do
begin
Car := JSONCars.Items[i] as TJSONObject;
CarName := Car.GetValue('name').Value;
CarManufacturer :=
Car.GetValue('manufacturer').Value;
JSONPrice := Car.GetValue('price') as TJSONObject;
CarPrice := (JSONPrice.GetValue('value') as
TJSONNumber).AsDouble;
CarCurrencyType := JSONPrice.GetValue('currency')
.Value
s := s + Format(
'Name = %s' + sLineBreak +
'Manufacturer = %s' + sLineBreak +
'Price = %.0n%s' + sLineBreak +
'-----' + sLineBreak,
[CarName, CarManufacturer,
CarPrice, CarCurrencyType]);
end;
JSON := s;
finally
JSONCars.Free;
end;
end;
- Run the application by hitting F9 (or by going to Run | Run).
- Click on the btnGenerateJSON button, and you should see a JSON array and some JSON objects in the memo.
- Click on the btnModifyJSON button, and you should see one more JSON object inside the outer JSON array in the memo.
- Click on the last button, and you should see the same data as before, but with a normal text representation.
- After the third click, you should see something similar to the following screenshot:
Figure 1.13: Text representation of the JSON data generated and modified