Usar y leer JSON en Business Central

Completado

Cuando trabaje con servicios web y API que se crean como servicios REST, deberá trabajar con datos de notación de objetos JavaScript (JSON). JSON es un formato de archivo ligero que se usa para almacenar e intercambiar datos entre clientes. Es un formato de estándar abierto que se basa en una colección de pares clave-valor. JSON usa la sintaxis de JavaScript, pero su formato es solo texto. Este texto se puede leer y usar como formato de datos por cualquier lenguaje de programación.

AL en Business Central también cuenta con compatibilidad integrada para trabajar con datos JSON. Estas clases JSON se utilizan para la transferencia de datos sencilla. No puede usar los tipos de datos JSON como un tipo de datos para campos de una tabla, pero puede crear variables con los tipos de datos JSON.

Estas clases son una implementación de las clases System.Json de .NET Framework:

  • JsonToken

  • JsonArray

  • JsonObject

  • JsonValue

Todos los tipos JSON son tipos de referencia, no tipos de valor.

En el ejemplo siguiente se muestra un ejemplo de JSON:

{
   "name": "John",
   "age": 31,
   "address": {
           "city": "New York",
           "country": "US"
   },
   "emails": [ "john@microsoft.com", "john@cronus.com", "john@outlook.com" ]
}

JsonToken

El objeto JsonToken es un contenedor para cualquier dato JSON con formato correcto. Un JsonToken predeterminado contiene el valor JSON de NULL. JsonToken es la clase base para los tipos de datos JsonArray, JsonValue y JsonObject.

  • ReadFrom(Text/InStream): lee los datos JSON del texto o la secuencia en una variable JsonToken.

  • WriteTo(Text/OutStream): serializa y escribe los datos JSON de la variable JsonToken en un texto o secuencia determinados.

  • SelectToken(JPath, JsonToken): selecciona una variable JsonToken mediante una expresión JPath.

  • IsArray: indica si un JsonToken representa una matriz JSON.

  • IsValue: indica si un JsonToken representa un valor JSON.

  • IsObject: indica si un JsonToken representa un objeto JSON.

  • AsArray: convierte el valor en un JsonToken a un tipo de datos JsonArray.

  • AsValue: convierte el valor en un JsonToken a un tipo de datos JsonValue.

  • AsObject: convierte el valor en un JsonToken a un tipo de datos JsonObject.

{
   "company": {
      "employees": [
           { "id": "Marcy", "salary": 8.95 },
           { "id": "John", "salary": 7 },
           { "id": "Diana", "salary": 10.95 }
      ] }
} 

procedure GetSalary(CompanyData: JsonToken; Employee: Text) Salary: Decimal;
var
    JPathExpr: Text;
    SalaryToken: JsonToken;
begin
    JPathExpr := '$.company.employees[?(@.id==''' + Employee + ''')].salary';
    CompanyData.SelectToken(JPathExpr, salaryToken);

    Salary := SalaryToken.AsValue().AsDecimal();
end;

JsonArray

JsonArray es un contenedor para cualquier matriz JSON bien formada. Un JsonArray predeterminado contiene una matriz JSON vacía. Este contenedor funciona más como un tipo de datos ListOf que como una matriz.

Debido a que JsonToken es la clase base para JsonArray, puede usar algunos de los siguientes métodos de JsonToken:

  • ReadFrom(Text/InStream)

  • WriteTo(Text/OutStream)

  • SelectToken(JPath, JsonToken)

  • AsToken: (convierte el valor en un JsonArray a un tipo de datos JsonToken).

El tipo de datos JsonArray tiene algunos métodos útiles para trabajar con los elementos de un JsonArray.

  • Add(Value): agrega un valor nuevo al final de JsonArray. Este valor puede ser JsonToken, JsonObject, JsonArray, Boolean, Char, Byte, Integer, BigInteger, Decimal, Duration, String, Date, Time o DateTime.

  • Get(Index, JsonToken): recupera el valor en el índice determinado en JsonArray.

  • IndexOf(Value): devuelve la posición del índice de un determinado valor.

  • Insert(Index, Value): inserta el valor en el índice determinado en la matriz mientras desplaza todos los valores a la derecha en una posición.

  • RemoveAt(Index): elimina el token en el índice determinado.

  • Set(Index, Value): reemplaza el valor en el índice determinado con un valor nuevo.

  • RemoveAll(): elimina todos los elementos secundarios de la matriz determinada.

  • Count: obtiene el número de elementos en el JsonArray.

JsonObject

JsonObject es un contenedor para cualquier dato JSON bien formado. Un JsonObject predeterminado contiene un objeto JSON vacío. Debido a que JsonToken es la clase base para JsonObject, puede usar algunos de los siguientes métodos de JsonToken:

  • ReadFrom(Text/InStream)

  • WriteTo(Text/OutStream)

  • SelectToken(JPath, JsonToken)

  • AsToken: convierte el valor en un JsonObject a un tipo de datos JsonToken.

  • Add(Value): agrega una nueva propiedad a un JsonObject.

  • Contains(Key): comprueba si un JsonObject contiene una propiedad con una clave determinada.

  • Get(Key, Value): recupera el valor de una propiedad con una clave determinada de un JsonObject.

  • Remove(Key): elimina la propiedad con la clave determinada del objeto.

  • Replace(Key, Value): reemplaza el valor de la propiedad con la clave determinada por el valor nuevo.

  • RemoveAll(): elimina todas las propiedades del objeto determinado.

JsonValue

JsonValue es un contenedor para cualquier valor JSON fundamental bien formado. Un JsonValue predeterminado se establece en el valor JSON de NULL. Dado que JsonToken es la clase base para JsonValue, puede usar algunos de los siguientes métodos de JsonToken:

  • ReadFrom(Text/InStream)

  • WriteTo(Text/OutStream)

  • SelectToken(JPath, JsonToken)

  • AsToken: convierte el valor en un JsonValue a un tipo de datos JsonToken.

  • IsNull(): indica si JsonValue contiene el valor JSON de NULL.

  • Métodos As: convierte el valor en un JsonValue a un tipo de datos específico. Entre los métodos se incluyen AsBoolean(), AsByte(), AsChar(), AsInteger(), AsDecimal(), AsCode(), AsText(), AsDate() y AsDateTime().

  • SetValue(Value): establece el contenido de la variable JsonValue en la representación JSON del valor determinado.

  • SetValueToNull(): establece el contenido de la variable JsonValue en la representación JSON de NULL.