Crear una solución > Trabajar con fórmulas y funciones > Uso de las funciones de JSON
 
Uso de las funciones de JSON
FileMaker Pro proporciona varias funciones de texto que permiten a la solución analizar y modificar datos de JSON de otras fuentes, como servicios Web que transfieren datos en formato JSON a través de una API REST.
Para obtener más información sobre el formato de datos de JSON, consulte json.org.
Recuperar datos de JSON de un servicio Web
Utilice el paso de guión Insertar desde URL para acceder a un servicio Web, especificar parámetros para la información que se va a recuperar, enviar y recibir encabezados HTTP y almacenar los resultados en una variable o un campo.
Por ejemplo, una panadería facilita su lista de productos a los clientes en formato JSON mediante una API REST: A continuación se devuelve la lista de las especialidades del día como datos de JSON en la variable $$JSON:
Establecer variable [ $url ; "https://<nombre_dominio_panadería>/rest/api/productos" ]
Insertar desde URL [ Verificar certificados SSL; Con diálogo: Inactivo; $$JSON ;
$url ; "--data lista=especialidades" ]
Para obtener información sobre los devueltos en $$JSON, consulte Datos de JSON de ejemplo.
FileMaker Pro proporciona también varias funciones de utilidad que administran la codificación de caracteres y la firma criptográfica necesarios para algunas API REST:
función HexDecode
función HexEncode
función TextDecode
función TextEncode
función Base64Decode
función Base64EncodeRFC
función CryptAuthCode
función CryptDigest
Aplicar formato a datos de JSON
Los datos de JSON no requieren espacios o finales de línea entre elementos. Sin embargo, para simplificar las lecturas de datos al depurar problemas, utilice el función JSONFormatElements, que añade tabuladores y caracteres de final de línea, como se muestra en Datos de JSON de ejemplo.
Analizar datos de JSON
Utilice las siguientes funciones de JSON para analizar datos de JSON, es decir, para obtener claves, valores, o matrices u objetos de JSON completos que puede procesar de forma adicional:
JSONGetElement: realiza consultas en los datos de JSON de un elemento (un objeto, una matriz o un valor).
JSONListKeys: enumera los nombres (claves) de objeto o los índices de matriz de los datos de JSON.
JSONListValues: enumera los valores de los datos de JSON
El primer parámetro de estas funciones, json, especifica el campo de texto, la variable o la expresión de texto que contiene los datos de JSON válidos con los que se trabajará.
El segundo parámetro, keyOrIndexOrPath, especifica la parte de los datos de JSON con los que se trabajará:
Clave: el nombre de un clave de un objeto de JSON.
Índice: el índice de un elemento de una matriz de JSON (el primer elemento tiene un índice 0).
Ruta: una cadena jerárquica de nombres de clave, índices de matriz o ambos elementos.
Se admite la siguiente sintaxis para el parámetro keyOrIndexOrPath.
 
Parámetro keyOrIndexOrPath
Indica que
"."
(Opcional) El nivel raíz, si es el primer carácter.
".[n]"
Elementos en el índice n de una matriz en el nivel raíz.
".nombre"
La clave de un objeto denominado nombre en el nivel raíz.
".nombreA.nombreB.nombreC"
Un objeto denominado nombreC, que desciende de nombreB y nombreA.
".[3][2][1]nombreA[0]"
El primer elemento de la matriz del objeto nombreA, que es el tercer nivel de un conjunto de matrices anidadas.
En el guión de ejemplo siguiente, se determina el número de productos de Datos de JSON de ejemplo (almacenados en la variable $$JSON) mediante JSONListKeys, se crea un registro de cada producto y, a continuación, se establecen los campos de cada registro en los valores obtenidos mediante JSONGetElement para cada producto.
Establecer variable [ $NúmeroProductos ; Valor:
   ValueCount (
      JSONListKeys ( $$JSON ; "producto.panadería" )
   ) ]
Establecer variable [ $i; Valor: 0 ]
If [ $NúmeroProductos > 0 ]
   Loop
      Nuevo registro/petición
      Establecer campo [ Productos::ID ;
         JSONGetElement ( $$JSON ; "producto.panadería[" & $i & "]id" ) ]
      Establecer campo [ Productos::Precio ;
         JSONGetElement ( $$JSON ; "producto.panadería[" & $i & "]precio" ) ]
      Establecer campo [ Productos::Existencias ;
         JSONGetElement ( $$JSON ; "producto.panadería[" & $i & "]existencias" ) ]
      Consignar registros/peticiones [ Con diálogo: Inactivo ]
      Establecer variable [ $i ; Valor: $i + 1 ]
      Exit Loop If [ $i $NúmeroProductos ]
   End Loop
End If
Modificar y añadir elementos de datos de JSON
Para modificar valores y añadir elementos a los datos de JSON, utiliza la función JSONSetElement. Los parámetros json y keyOrIndexOrPath de esta función presentan el funcionamiento descrito en Analizar datos de JSON. Si keyOrIndexOrPath especifica un elemento existente, se modifica el valor de ese elemento; si el elemento no existe, se añade uno nuevo.
JSONSetElement establece el elemento especificado en el parámetro valor. Puede especificar cualquier valor de JSON válido, desde una cadena o número sencillos hasta una matriz o un objeto complejos.
El parámetro tipo especifica el tipo de datos del valor, por lo que analizador de JSON seguirá reglas estrictas al administrar cada tipo de datos. Para obtener información sobre los tipos de datos admitidos, consulte función JSONSetElement. Para insertar datos de JSON en json, puede establecer el tipo en JSONRaw para que el analizador de JSON determine el tipo de datos del valor.
En el siguiente ejemplo, se añaden los pares de clave-valor de un nuevo producto a un objeto de JSON vacío. A continuación, se añade el nuevo objeto al final de la matriz de productos de la variable $$JSON (consulte Datos de JSON de ejemplo).
Establecer variable [ $NuevoProducto ; Valor:
   JSONSetElement ( "{}" ;
      [ "id" ; "FB4" ; JSONString ] ;
      [ "nombre" ; "Tarta de vainilla" ; JSONString ] ;
      [ "precio" ; 17,5 ; JSONNumber ] ;
      [ "existencias" ; 12 ; JSONNumber ] ;
      [ "categoría" ; "Tartas" ; JSONString ] ;
      [ "especialidad" ; true ; JSONBoolean ]
   ) ]
Establecer variable [ $ÍndiceSiguiente ; Valor:
   ValueCount (
      JSONListKeys ( $$JSON ; "producto.panadería" )
   ) ]
Establecer variable [ $$JSON ; Valor:
   JSONSetElement (
      $$JSON ; "producto.panadería[" & $ÍndiceSiguiente & "]" ; $NuevoProducto ;
      JSONObject
   ) ]
Eliminar elementos de datos de JSON
Para eliminar un elemento, utilice la función JSONDeleteElement. Los parámetros json y keyOrIndexOrPath de esta función presentan el funcionamiento descrito en Analizar datos de JSON. El parámetro keyOrIndexOrPath debe especificar un elemento existente en json.
En el siguiente ejemplo, se elimina el elemento de la matriz de productos cuya clave "id" presenta el valor "FB3" en la variable $$JSON (consulte Datos de JSON de ejemplo).
Establecer variable [ $NúmeroProductos ; Valor:
   ValueCount (
      JSONListKeys ( $$JSON ; "producto.panadería" )
   ) ]
Establecer variable [ $i ; Valor: 0 ]
If [ $NúmeroProductos > 0 ]
   Loop
      Establecer variable [ $ID ; Valor:
         JSONGetElement ( $$JSON ; "producto.panadería[" & $i & "]id" ) ]
      If [ $ID = "FB3" ]
         Establecer variable [ $$JSON ; Valor:
            JSONDeleteElement ( $$JSON ; "producto.panadería[" & $i & "]" ) ]
         Salir del guión [ Resultado de texto: 0 ]
      End If
      Establecer variable [ $i ; Valor: $i + 1 ]
      Exit Loop If [ $i $NúmeroProductos ]
   End Loop
End If
Administrar errores en los datos de JSON
Si se produce un error al analizar el parámetro json, la función de JSON devuelve "?" seguido de un mensaje de error del analizador de JSON. Por ejemplo, cuando falta el signo ":" tras la clave "panadería" en Datos de JSON de ejemplo, este cálculo
JSONGetElement ( $$JSON ; "producto.panadería[0]id" )
devuelve este mensaje de error:
? * Line 3, Column 2
  Missing ':' after object member name
* Line 13, Column 5
  Extra non-whitespace after JSON value.
Para determinar si los datos de JSON son válidos antes de utilizarlos, use la función JSONFormatElements y compruebe si el primer carácter es "?". Por ejemplo:
Establecer variable [ $resultado; Valor: JSONFormatElement ( $$JSON ) ]
If [ Queda(n) ( $resultado ; 1 ) = "?" ]
   # $$JSON contiene datos de JSON no válidos
End If
Datos de JSON de ejemplo
En el siguiente ejemplo, los datos de JSON contienen un objeto "panadería" que tiene una matriz de tres objetos "producto", cada uno con varios pares clave-valor.
{
"panadería" :
{
"producto" :
[
{
"id" : "FB1",
"nombre" : "Rosquillas",
"precio": 1,99,
"existencias" : 43,
"categoría" : "Panes",
"especialidad" : true
},
{
"id" : "FB2",
"precio": 22,5,
"nombre" : "Tarta de chocolate",
"existencias" : 23,
"categoría" : "Tartas",
"especialidad" : true
},
{
"id" : "FB3",
"precio": 3,95,
"nombre" : "Baguette",
"existencias" : 34,
"categoría" : "Panes",
"especialidad" : true
}
]
}
}
Notas 
El analizador de JSON conserva el orden de los elementos de la matriz, pero no el orden de los elementos de un objeto. Por lo tanto, es posible que las funciones de JSON devuelvan elementos de un objeto en un orden diferente al especificado.
Temas relacionados 
Funciones de texto
Funciones de campos contenedor