J'essaie de tracer (avec Flot ) un graphique à secteurs avec des données
var data = <?php echo json_encode($data)?>
Le résultat que j'en tire est le suivant:
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"}
]
Le problème ici est que j'ai besoin de label
et data
sans les guillemets, j'ai déjà essayé json_encode($data, JSON_NUMERIC_CHECK);
mais ne supprime que les guillemets des nombres.
Le format suivant est ce dont j'ai besoin:
var data = [
{label:"Crear Usuario",data:2}, ...
Tout d'abord, vous devez générer votre tableau en php afin que la valeur des données soient des entiers, pas des chaînes:
J'ai imité votre tableau à partir de votre json_encode (), je suppose qu'il ressemble à ceci (ou qu'il devrait):
$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);
Alors vous manquez en Javascript le JSON.parse () pour faire cette sortie dans un objet json:
<script>
var data = '<?php echo $data; ?>';
var json = JSON.parse(data);
console.log(json);
console.log(json[0]);
</script>
La sortie de console.log () est la suivante:
[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
On dirait ce dont vous avez besoin, n'est-ce pas?
Il n'y a pas de différence entre les clés citées et non citées. Le problème concerne les guillemets autour des valeurs de données réelles, car Flot nécessite des chiffres et non des chaînes.
La fonction json_encode décide de citer ou non le devis en fonction du type de données que vous lui donnez. Dans ce cas, il semble que les opérations que vous effectuez pour créer $ data produisent des valeurs de chaîne plutôt que des entiers. Vous devez réexaminer ces opérations ou indiquer explicitement à PHP de les interpréter en tant que nombres, à l'aide de la conversion (int) ou (float), ou des fonctions intval/floatval.
Essayez quelque chose comme ça:
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;
}
et quand couru
$a = array("string"=>'Crear "Usuario', 'foo'=>':', "int"=>2, "bool"=>false);
var_dump( buildBrokenJson($a) );
il donne:
string(54) "{string:"Crear \"Usuario", foo:":", int:2, bool:false}"
J'ai créé une classe pour formater JSON avec php sans guillemets sur les clés voici
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;
}
}
vous pouvez maintenant appeler
$jsonWithoutKeyQuotes = JsonFormatter::iterate($data);
merci à Marcin Orlowski