utf8 json_encode ejemplo array php javascript arrays flot json

ejemplo - Cómo json_encode php array pero las claves sin comillas



php object to json (4)

He creado una clase para formatear json con php sin comillas en las claves aquí es

class JsonFormatter { static $result = ''''; static $separator = ''''; public static function iterateArray($data) : string { static::$result .= ''[''; static::$separator = ''''; foreach ($data as $key => $val) { if (is_int($val)) { } elseif (is_string($val)) { static::$result .= ''"'' . str_replace(''"'', ''/"'', $val) . ''"''; } elseif (is_bool($val)) { static::$result .= $val ? ''true'' : ''false''; } elseif (is_object($val)) { static::iterateObject($val); static::$result .= '', ''; } elseif (is_array($val)) { static::iterateArray($val); static::$result .= '', ''; } else { static::$result .= $val; } if (!is_int($val)) { static::$separator = '', ''; } } static::$result .= '']''; return static::$result; } public static function iterate($data) { if (is_array($data)) { static::iterateArray($data); } elseif (is_object($data)) { static::iterateObject($data); } return static::$result; } public static function iterateObject($data) { static::$result .= ''{''; static::$separator = ''''; foreach ($data as $key => $val) { static::$result .= static::$separator . $key . '':''; if (is_int($val)) { static::$result .= $val; } elseif (is_string($val)) { static::$result .= ''"'' . str_replace(''"'', ''/"'', $val) . ''"''; } elseif (is_bool($val)) { static::$result .= $val ? ''true'' : ''false''; } elseif (is_object($val)) { static::iterate($val, true); static::$result .= '', ''; } elseif (is_array($val)) { static::iterateArray($val, true); static::$result .= '', ''; } else { static::$result .= $val; } static::$separator = '', ''; } static::$result .= ''}''; return static::$result; } }

ahora puedes llamar

$jsonWithoutKeyQuotes = JsonFormatter::iterate($data);

Gracias a Marcin Orlowski.

Estoy tratando de trazar (con Flot ) un gráfico circular con algunos datos

var data = <?php echo json_encode($data)?>

El resultado que obtengo de esto es este:

var data = [ {"label":"Crear Usuario", "data":"2"}, {"label":"Impresoras", "data":"1"}, {"label":"Problema Correo", "data":"1"}, {"label":"Requisicion Equipo", "data":"1"}, {"label":"Sitio Web", "data":"1"} ]

El problema aquí es que necesito la label y los data sin las comillas, ya probé json_encode($data, JSON_NUMERIC_CHECK); pero solo quita las comillas de los numeros.

El siguiente formato es lo que necesito:

var data = [ {label:"Crear Usuario",data:2}, ...


Intenta algo como esto:

function buildBrokenJson( array $data ) { $result = ''{''; $separator = ''''; foreach( $data as $key=>$val ) { $result .= $separator . $key . '':''; if( is_int( $val ) ) { $result .= $val; } elseif( is_string( $val ) ) { $result .= ''"'' . str_replace( ''"'', ''/"'', $val) . ''"''; } elseif( is_bool( $val ) ) { $result .= $val ? ''true'' : ''false''; } else { $result .= $val; } $separator = '', ''; } $result .= ''}''; return $result; }

y cuando se ejecuta

$a = array("string"=>''Crear "Usuario'', ''foo''=>'':'', "int"=>2, "bool"=>false); var_dump( buildBrokenJson($a) );

da:

string(54) "{string:"Crear /"Usuario", foo:":", int:2, bool:false}"


No hay diferencia entre las claves entre comillas y no entre comillas. El problema está en la cita en torno a los valores de datos reales, ya que Flot requiere números, no cadenas.

La función json_encode decide si debe cotizar según el tipo de datos que le está dando. En este caso, parece que cualquier operación que esté realizando para crear $ data está produciendo valores de cadena en lugar de números enteros. Debe volver a examinar esas operaciones, o decirle explícitamente a PHP que las interprete como números, usando la conversión (int) o (float), o las funciones intval / floatval.


Primero, tienes que generar tu matriz en PHP para que los valores de los datos sean enteros, no cadenas:

Emulé tu matriz desde tu json_encode (), supongo que se parece a esto (o debería):

$array = array( array("label" => "Crear Usuario", "data" => 2), array("label" => "Impresoras", "data" => 1), array("label" => "Problema Correo", "data" => 1), array("label" => "Requisicion Equipo", "data" => 1), array("label" => "Sitio Web", "data" => 1) ); $data = json_encode($array);

  • Tenga en cuenta que los 2 y 1 no tienen comillas, por lo que de esta manera son enteros, esto es importante.

Entonces estás perdiendo Javascript en JSON.parse () para convertir esa salida en un objeto json:

<script> var data = ''<?php echo $data; ?>''; var json = JSON.parse(data); console.log(json); console.log(json[0]); </script>

  • Tenga en cuenta que var data = ... es SINGLE QUOTED, por lo que puede capturar el eco de php como una cadena

La console.log () ''s esta salida para mí:

[Object, Object, Object, Object, Object] // First console.log(): one object with the 5 Objects. Object {label: "Crear Usuario", data: 2} // secons console log (json[0]) with the first object

Parece que lo que necesitas, ¿verdad?