如何json_encode PHP数组,但不包括引号键(How to json_encode php

2019-07-04 02:23发布

我试图绘制(与海军报 )饼图一些数据

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"}
]

这里的问题是我需要的labeldata不包括引号,我已经尝试过json_encode($data, JSON_NUMERIC_CHECK); 但只会从数字的报价。

下面的格式是什么,我需要:

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

Answer 1:

首先,你必须产生在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 

看起来你需要什么,我是不是正确的?



Answer 2:

有报价且无引号键之间没有什么区别。 问题是与各地的实际数据值的报价,因为海军报要求的数字,而不是字符串。

该json_encode函数决定基于你给它的数据的类型是否引用。 在这种情况下,它看起来像你执行创建$数据产生的,而不是整数,字符串值的任何操作。 你需要重新审视这些操作,或者明确地告诉PHP解释这些数字,使用(INT)或(浮动)铸造,或者INTVAL / floatval功能。



Answer 3:

尝试是这样的:

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}"


Answer 4:

我上的按键创建一个类格式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



文章来源: How to json_encode php array but the keys without quotes