php - ¿Cómo puedo embellecer JSON programáticamente?
beautifier (6)
Creé un embellecedor JSON no destructivo que admite varios niveles de profundidad.
/**
* JSON beautifier
*
* @param string The original JSON string
* @param string Return string
* @param string Tab string
* @return string
*/
function pretty_json($json, $ret= "/n", $ind="/t") {
$beauty_json = '''';
$quote_state = FALSE;
$level = 0;
$json_length = strlen($json);
for ($i = 0; $i < $json_length; $i++)
{
$pre = '''';
$suf = '''';
switch ($json[$i])
{
case ''"'':
$quote_state = !$quote_state;
break;
case ''['':
$level++;
break;
case '']'':
$level--;
$pre = $ret;
$pre .= str_repeat($ind, $level);
break;
case ''{'':
if ($i - 1 >= 0 && $json[$i - 1] != '','')
{
$pre = $ret;
$pre .= str_repeat($ind, $level);
}
$level++;
$suf = $ret;
$suf .= str_repeat($ind, $level);
break;
case '':'':
$suf = '' '';
break;
case '','':
if (!$quote_state)
{
$suf = $ret;
$suf .= str_repeat($ind, $level);
}
break;
case ''}'':
$level--;
case '']'':
$pre = $ret;
$pre .= str_repeat($ind, $level);
break;
}
$beauty_json .= $pre.$json[$i].$suf;
}
return $beauty_json;
}
Podría decir que esto es un duplicado de esta pregunta , pero la pregunta original NO SE HA RESPONDIDO allí. Parte importante de la pregunta es: programmatically
?
¿Hay alguna función php? ¿Nativo o casero?
Este simple truco hizo el trabajo por mí, no quería bibliotecas ni funciones adicionales:
$json = ''{"status":"0","status_translated":"Request successful!","data":"1"}'';
$json_beautified = str_replace(array("{", "}", ''","''), array("{<br /> ", "<br />}", ''",<br /> "''), $json);
Y el resultado se ve así:
{
"status":"0",
"status_translated":"Request successful!",
"data":"1"
}
Esto es solo para el código json que va 1 paso en profundidad, espero que ayude.
Para el uso de la línea de comandos, puede utilizar el embellecedor js. No es necesario compartir sus datos con sitios externos.
Parece que esto podría funcionar:
http://recursive-design.com/blog/2008/03/11/format-json-with-php/
Resultado de génesis:
[[["er",null,null,null,null,500],["e",2,null,null,57]],''45932b7d6d6dc08e'']
a
[
[
[
"er",
null,
null,
null,
null,
500
],
[
"e",
2,
null,
null,
57
]
],
''45932b7d6d6dc08e''
]
Tenía la misma pregunta en este momento. Pero como tu tambien tengo php <5.4. Zend Framework tiene Zend_Json :: prettyPrint (). Funciona muy bien
json_encode() tiene un indicador JSON_PRETTY_PRINT
echo json_encode($data, JSON_PRETTY_PRINT);