Skip to content

Delphi JSON, Sintaxis

Sabemos que JSON (JavaScript Object Notation) es un formato de texto para poder intercambiar datos multiplataformas.

A partir del año 2019, se convirtió en un formato totalmente independiente, y ha tenido tanto éxito que hasta Google lo utiliza en sus Api’s.

En un artículo anterior, hemos explicado como parsear datos JSON, y en este veremos su sintaxis.

Sintaxis JSON

En JSON tenemos disponible seis tipos de datos, pero aunque parezcan pocos, con ellos abarcamos absolutamente todo.

Los tipos de datos disponibles en JSON son Número, Cadenas, Booleanos, Array, Objetos y valor null.

JSON: Números

En Delphi, este tipo de datos permite tanto números enteros como fraccionales, positivos como negativos.

Los número se deben ingresar a través del objeto TJSONNumber.

// JSON en Delphi: Números

Uses
  System.JSON;

procedure JSONPair;
var
  vJSON: TJSONObject;
begin
  vJSON := TJSONObject.Create;

  vJSON.AddPair('numeros', TJSONNumber.Create(123));
  vJSON.AddPair('numeros', TJSONNumber.Create(-123));
  vJSON.AddPair('numeros', TJSONNumber.Create(123.45));
  vJSON.AddPair('numeros', TJSONNumber.Create(-123.45));
end;

// Formato resultante:
//   {"numeros":123,"numeros":-123,"numeros":123.45,"numeros":-123.45}

JSON: Cadenas

Con este tipo de datos, podemos ingresar cualquier clase de caracteres, desde una cadena vacía o más, en formato JSON se representan entre comillas dobles.

// JSON en Delphi: Cadenas

Uses
  System.JSON;

procedure JSONPair;
var
  vJSON: TJSONObject;
begin
  vJSON := TJSONObject.Create;

  vJSON.AddPair('cadenavacia', '');
  vJSON.AddPair('cadenas', 'esta es una cadena');
end;

// Formato resultante:
//   {"cadenavacia":"","cadenas":"esta es una cadena"}

JSON: Booleanos

Este tipo de datos representan valores booleanos y pueden tener dos valores True y False.

Los Booleanos se deben ingresas a través de los objetos TJSONTrue y TJSONFalse.

// JSON en Delphi: Booleanos

Uses
  System.JSON;

procedure JSONPair;
var
  vJSON: TJSONObject;
begin
  vJSON := TJSONObject.Create;

  vJSON.AddPair('verdadero', TJSONTrue.Create);
  vJSON.AddPair('falso', TJSONFalse.Create);
end;

// Formato resultante:
//   {"verdadero":true,"falso":false}

JSON: Array

Los Array en JSON representan un lista ordenada de cero o más valores de cualquiera de los tipos de datos aceptados por JSON.

Los diferentes valores van separados por comas (,) y el vector se representa entre corchetes [] y se ingresan a través del objeto TJSONArray.

// JSON en Delphi: Array

Uses
  System.JSON;

procedure JSONPair;
var
  vJSON: TJSONObject;
  vJSON2: TJSONObject;
  vJSONArray: TJSONArray;
begin
  vJSON := TJSONObject.Create;
  vJSON2 := TJSONObject.Create;

  vJSON.AddPair('Valor1', TJSONNumber.Create(1));
  vJSON.AddPair('Valor2', TJSONNumber.Create(2));
  vJSON.AddPair('Valor3', TJSONNumber.Create(3));

  vJSONArray := TJSONArray.Create;

  vJSONArray.AddElement(vJSON);

  vJSON2.AddPair('Array', vJSONArray);
end;

// Formato resultante:
//   {"Array":[{"Valor1":1,"Valor2":2,"Valor3":3}]}

JSON: Null

Como su nombre lo indica, representa un valor null.

El valor Null se ingresa a través del objeto TJSONNull.

// JSON en Delphi: Null

Uses
  System.JSON;

procedure JSONPair;
var
  vJSON: TJSONObject;
begin
  vJSON := TJSONObject.Create;

  vJSON.AddPair('valornulo', TJSONNull.Create);
end;

// Formato resultante:
//   {"valornulo":null}

JSON: Objetos

Representa a colecciones no ordenadas depares (Pair) de cualquier tipo de datos soportados por JSON, con un nombre representando el nombre del objeto.

// JSON en Delphi: Objetos

Uses
  System.JSON;

procedure JSONPair;
var
  vJSON: TJSONObject;
  vJSONObj: TJSONObject;
begin
  vJSON := TJSONObject.Create;
  vJSONObj := TJSONObject.Create;

  vJSON.AddPair('numeros', TJSONNumber.Create(123));
  vJSON.AddPair('cadenas', 'esta es una cadena');
  vJSON.AddPair('verdadero', TJSONTrue.Create);
  vJSON.AddPair('valornulo', TJSONNull.Create);

  vJSONObj.AddPair('objeto', vJSON);
end;

// Formato resultante:
//   {"objeto":{"numeros":123,"cadenas":"esta es una cadena","verdadero":true,"valornulo":null}}