Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20.6
JSON Resolve pointers
|
JSON Resolve pointers ( objeto {; opciones} ) -> Resultado | ||||||||
Parámetro | Tipo | Descripción | ||||||
objeto | Objeto |
![]() |
Objeto que contiene punteros JSON para resolver | |||||
![]() |
Objeto con punteros JSON resueltos (sólo si resultado es un objeto) | |||||||
opciones | Objeto |
![]() |
Opciones para la resolución de punteros | |||||
Resultado | Objeto |
![]() |
Objeto que contiene el resultado del proceso | |||||
El comando JSON Resolve pointers resuelve todos los punteros JSON encontrados en el objeto, con respecto a la configuración de opciones (si existe).
Los punteros JSON son particularmente útiles para:
Pase en el parámetro objeto un objeto que contiene punteros JSON que se deben resolver (para más información sobre la sintaxis del puntero JSON, consulte el párrafo Definir punteros JSON abajo).
Nota: el objeto fuente se actualizará con el resultado de la resolución del puntero después de ejecutar el comando (excepto si el resultado no es un objeto, consulte abajo). Si desea conservar una versión original del objeto, puede considerar utilizar previamente OB Copy.
Opcionalmente, puede pasar en opciones un objeto que contenga propiedades específicas que se utilizarán al resolver punteros. Se soportan las siguientes propiedades:
Propiedad | Tipo de valor | Descripción |
rootFolder | Cadena | Ruta absoluta (utilizando la sintaxis 4D estándar) a la carpeta que se utilizará para resolver punteros relativos en el objeto. El valor predeterminado es la carpeta Recursos de la base. |
merge | Booleano | Fusiona objetos con objetos puntero (true) en lugar de reemplazarlos (false). El valor predeterminado es false ![]() |
Después de ejecutar el comando:
En todos los casos, el comando devuelve un objeto que contiene las siguientes propiedades:
Propiedad | Tipo de valor | Descripción |
value | Cualquiera | Resultado del procesamiento del comando en objeto. Si el resultado es un objeto, es igual al objeto de salida. |
success | Booleano | true si todos los punteros han sido resueltos correctamen |
errors | Colección | Colección de errores si los hay |
errors[].code | Número | código del error |
errors[].message | Cadena | mensaje de error |
errors[].pointerURI | Cadena | valor del puntero |
errors[].referredPath | Cadena | ruta completa del documento |
JSON Pointer es un estándar que define una sintaxis de cadena que se puede utilizar para acceder a un campo o a un valor clave particular en todo el documento JSON. El estándar se ha descrito en RFC 6901.
Un puntero JSON es, estrictamente hablando, una cadena compuesta de partes separadas por '/'. Un puntero JSON normalmente se encuentra en un URI que especifica el documento en el que se resolverá el puntero. El carácter de fragmento "#" se utiliza en la URI para especificar el puntero JSON Por convención, se puede encontrar un URI que contenga un puntero JSON en una propiedad de objeto JSON que debe llamarse "$ ref".
{ "$ref":<path>#<json_pointer> }
Nota: 4D no soporta el carácter "-" como referencia a elementos de array inexistentes.
Los punteros JSON se resuelven recursivamente, lo que significa que si un puntero resuelto también contiene punteros, se resuelven recursivamente y así sucesivamente, hasta que se resuelvan todos los punteros. En este contexto, todas las rutas de archivo encontradas en las URIs de puntero JSON pueden ser relativas o absolutas. Deben utilizar '/' como delimitador de ruta y se resuelven de la siguiente manera:
Notas:
Este ejemplo básico ilustra cómo un puntero JSON se puede definir y reemplazar en un objeto:
// crear un objeto con algún valor
C_OBJECT($o)
$o:=New object("value";42)
// crear el objeto puntero JSON
C_OBJECT($ref)
$ref:=New object("$ref";"#/value")
// añadir el objeto puntero JSON como propiedad
$o.myJSONPointer:=$ref
// resolverlo todo y verificar que el puntero se ha resuelto
C_OBJECT($result)
$options:=New object("rootFolder";Get 4D folder(Current resources folder);"merge";True)
$result:=JSON Resolve pointers($o;$options)
If($result.success)
ALERT(JSON Stringify($result.value))
//{"value":42,"myJSONPointer":42}
Else
ALERT(JSON Stringify($result.errors))
End if
Usted quiere reutilizar "billingAddress" como "shippingAddress" en el siguiente objeto JSON (llamado $oMyConfig):
{ "lastname": "Doe", "firstname": "John", "billingAddress": { "street": "95 S. Market Street", "city": "San Jose", "state": "California" }, "shippingAddress": { "$ref": "#/billingAddress" } }
Después de ejecutar este código:
$oResult:=JSON Resolve pointers($oMyConfig)
... se devuelve el siguiente objeto:
{ "success": true, "value": { "lastname": "Doe", "firstname": "John", "billingAddress": { "street": "95 S. Market Street", "city": "San Jose", "state": "California" }, "shippingAddress": { "street": "95 S. Market Street", "city": "San Jose", "state": "California" } } }
Este ejemplo ilustra el efecto de la opción "fusionar". Usted desea editar los derechos de un usuario basándose en un archivo predeterminado.
{ "rights": { "$ref": "defaultSettings.json#/defaultRights", "delete": true, "id": 456 } }
El archivo defaultSettings.json contiene:
{ "defaultRights": { "edit": true, "add": false, "delete": false } }
Si ejecuta:
C_OBJECT($options)
$options:=New object("merge";False) //reemplazar contenidos
$oResult:=JSON Resolve pointers($oMyConfig;$options)
el valor resultante es exactamente el contenido del archivo defaultSettings.json:
{ "success": true, "value": { "rights": { "edit": true, "add": false, "delete": false } } }
Si ejecuta:
C_OBJECT($options)
$options:=New object("merge";True) //fusionar ambos contenidos
$oResult:=JSON Resolve pointers($oMyConfig;$options)
...el valor resultante es una versión modificada del objeto original:
{ "success": true, "value": { "rights": { "edit": true, "add": false, "delete": true, "id": 456 } } }
Producto: 4D
Tema: JSON
Número
1478
Creado por: 4D v16 R5
Manual de lenguaje 4D ( 4D v20)
Manual de lenguaje 4D ( 4D v20.1)
Manual de lenguaje 4D ( 4D v20.2)
Manual de lenguaje 4D ( 4D v20.3)
Manual de lenguaje 4D ( 4D v20.4)
Manual de lenguaje 4D ( 4D v20.5)
Manual de lenguaje 4D ( 4D v20.6)