El formato de datos Json se creó para facilitar la transferencia de datos estructurados entre el cliente y el servidor.
Para convertir un array u objeto en Json, existe la función json_encode
en PHP:
$user = ['nombre' => 'Jan','apellido' => 'Barasek','papel' => ['Administración','moderador',],];echo json_encode($user);
Generará:
{"name":"Jan","surname":"Barasek","role":["admin","moderator"]}
La función json_encode()
también puede convertir otros tipos de datos. Por ejemplo, podemos insertar directamente integer
(entero), string
(cadena), etc.
En la configuración por defecto, el json se genera como una cadena larga. Esto es por la razón de ocupar el menor espacio posible.
Si necesita una mejor legibilidad humana, simplemente pase la constante JSON_PRETTY_PRINT
como segundo parámetro:
echo json_encode($users, JSON_PRETTY_PRINT);
Generará:
{"nombre": "Jan","apellido": "Barasek","papel": ["Administración","moderador"]}
El formato normal de json a través de PHP no tiene ninguna configuración adicional y tenemos que conformarnos con esta salida solamente. Por ejemplo, si queremos sangrar tabulaciones en lugar de espacios (o modificar las reglas de generación de cualquier manera), tenemos que programarlo nosotros mismos.
Esta función ya puede hacer un formato básico y sólo tenemos que modificarla:
function prettyJsonPrint(string $json): string{$result = '';$level = 0;$in_quotes = false;$in_escape = false;$ends_line_level = NULL;$json_length = strlen($json);for ($i = 0; $i < $json_length; $i++) {$char = $json[$i];$new_line_level = NULL;$post = '';if ($ends_line_level !== NULL) {$new_line_level = $ends_line_level;$ends_line_level = NULL;}if ($in_escape) {$in_escape = false;} else if ($char === '"') {$in_quotes = !$in_quotes;} else if (!$in_quotes) {switch ($char) {case '}':case ']':$level--;$ends_line_level = NULL;$new_line_level = $level;break;case '{':case '[':$level++;case ',':$ends_line_level = $level;break;case ':':$post = '';break;case "":case "\t":case "\n":case "\r":$char = '';$ends_line_level = $new_line_level;$new_line_level = NULL;break;}} else if ($char === '\\') {$in_escape = true;}if ($new_line_level !== NULL) {$result .= "\n" . str_repeat("\t", $new_line_level);}$result .= $char . $post;}return $result;}
Fuente : https://stackoverflow.com/questions/6054033/pretty…
Por ejemplo, la entrada:
{"clave1":[1,2,3],"clave2":"valor"}
Formateado como:
{"clave1": [1,2,3],"clave2": "valor"}
Que es mucho más fácil de leer (debido a la sangría consistente de cada elemento).
A veces puede ser útil resaltar en color las claves, los datos en sí mismos y los elementos individuales de formato (especialmente los corchetes de cierre).
Por ejemplo, la entrada:
{"acceder a": {"ficha": {"emitido_a": "2008-08-16T14:10:31.309353", "expira": "2008-08-17T14:10:31Z", "id": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"}, "servicioCatálogo": [], "usuario": {"nombre de usuario": "ajay", "roles_enlaces": [], "id": "16452ca89", "roles": [], "nombre": "ajay"}}}
Formateado como:
{
"acceso": {
"token": {
"issued_at": "2008-08-16T14:10:31.309353",
"expires": "2008-08-17T14:10:31Z",
"id": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXiOiAi"
"serviceCatalog": [
],
"usuario": {
"nombre de usuario": "ajay",
"roles_links": [
[ ],
: "16452ca89",
"roles": [
[ ],
"nombre": "ajay"
}
}
}
Esto se puede implementar mediante la siguiente función:
function jsonColorFormater(string $json, string $indentation = "\t"): string{$crl = 0;$ss = false;$buffer = '';for ($c = 0; $c < strlen($json); $c++) {if ($json[$c] == '}' || $json[$c] == ']') {$crl--;$buffer .= "\n" . str_repeat($indentation, $crl);}if ($json[$c] == '"' && (@$json[$c - 1] == ',' || @$json[$c - 2] == ',')) {$buffer .= "\n" . str_repeat($indentation, $crl);}if ($json[$c] == '"' && !$ss) {$buffer .= '<span style="color:'.((@$json[$c - 1] == ':' || @$json[$c - 2] == ':') ? '#35D' : '#C22').';">';}$buffer .= $json[$c];if ($json[$c] == '"' && $ss) $buffer .= '</span>';if ($json[$c] == '"') $ss = !$ss;if ($json[$c] == '{' || $json[$c] == '[') {$crl++;$buffer .= "\n". str_repeat($indentation, $crl);}}// Devuelve la fuente HTMLreturn '<pre>' . $buffer . '</pre>';}// Sólo llama a esto y devuelve la salida formateada// echo jsonColorFormater($data, ' ');
Característica tomada y reescrita radicalmente de: https://stackoverflow.com/a/20953262/6777550
Esto se puede implementar con la función json_decode(), que hace una estructura de datos de Json con la que tenemos que trabajar como un objeto:
$json = '{"nombre": "Jan", "apellido": "Barasek", "rol":["administrador", "moderador"]}';$decode = json_decode($json);echo $decode->name; // Devuelve 'Jan'// echo $decode->role;//// Esto no es posible porque el rol de la propiedad// contiene un array, necesitamos iterar.echo '<ul>';foreach ($decode->role as $role) {echo '<li>' . $role . '</li> <li>Por lo tanto, no es necesario que el usuario se sienta cómodo.'; // Enumera consecutivamente los roles detrás de las viñetas}echo '';
Por ejemplo, en la biblioteca jQuery, una cadena json puede ser analizada en un objeto muy fácilmente:
var json = '{"nombre": "Jan", "apellido": "Barasek", "rol":["administrador", "moderador"]}';var parser = $.parseJSON(json);document.write('Nombre:' + parser.name);console.log(parser); // Imprime el objeto completo en la consola para su depuración
En javascript, en general, cualquier json es un objeto javascript válido con el que se puede trabajar directamente y acceder a sus propiedades.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | es