我试图绘制(与海军报 )饼图一些数据
var data = <?php echo json_encode($data)?>
结果我从得到是这样的:
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"}
]
这里的问题是我需要的label
和data
不包括引号,我已经尝试过json_encode($data, JSON_NUMERIC_CHECK);
但只会从数字的报价。
下面的格式是什么,我需要:
var data = [
{label:"Crear Usuario",data:2}, ...
首先,你必须产生在PHP您的阵列,因此数据的值是整数,而不是字符串:
我效仿你的阵列从json_encode(),我想它看起来像这样(或应该):
$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);
- 请注意,2名1的是不带引号的,所以这种方式,他们是整数,这是非常重要的。
那么你在JavaScript中JSON.parse()来想念实际上使该输出成JSON对象:
<script>
var data = '<?php echo $data; ?>';
var json = JSON.parse(data);
console.log(json);
console.log(json[0]);
</script>
- 请注意,VAR数据=是单引号,让你从PHP赶上回声作为一个String
在执行console.log()是为我这样的输出:
[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
看起来你需要什么,我是不是正确的?
有报价且无引号键之间没有什么区别。 问题是与各地的实际数据值的报价,因为海军报要求的数字,而不是字符串。
该json_encode函数决定基于你给它的数据的类型是否引用。 在这种情况下,它看起来像你执行创建$数据产生的,而不是整数,字符串值的任何操作。 你需要重新审视这些操作,或者明确地告诉PHP解释这些数字,使用(INT)或(浮动)铸造,或者INTVAL / floatval功能。
尝试是这样的:
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;
}
和运行时
$a = array("string"=>'Crear "Usuario', 'foo'=>':', "int"=>2, "bool"=>false);
var_dump( buildBrokenJson($a) );
它给:
string(54) "{string:"Crear \"Usuario", foo:":", int:2, bool:false}"
我上的按键创建一个类格式JSON的PHP不带引号这里是它
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;
}
}
您现在可以调用
$jsonWithoutKeyQuotes = JsonFormatter::iterate($data);
感谢马尔钦ORLOWSKI