Recuerda que en las ciencias un error casi siempre tiene diferentes resoluciones, así que te compartiremos la mejor y más eficiente.
Solución:
Primero, tienes que generar tu array en php, por lo que el valor de los datos son números enteros, no cadenas:
Emulé tu array de su json_encode (), supongo que se ve así (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 están entre comillas, por lo que son números enteros, esto es importante.
Entonces te estás perdiendo en Javascript el JSON.parse() para convertir esa salida en un objeto json:
- Tenga en cuenta que var data = … es SINGLE QUOTED, por lo que captura el eco de php como una cadena
El resultado de console.log() es esto 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 lo que necesitas, ¿verdad?
No hay diferencia entre citado y no citado keys. El problema está en las comillas de los valores reales de los datos, ya que Flot requiere números, no cadenas.
La función json_encode decide si cotizar según el tipo de datos que le está dando. En este caso, parece que cualquier operación que esté realizando para crear $datos está produciendo string valores 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 conversión (int) o (float), o las funciones intval/floatval.
Prueba 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"
Puntuaciones y reseñas
Si aceptas, tienes la opción de dejar un ensayo acerca de qué le añadirías a esta noticia.