【问题标题】:Create JSON object using PHP [duplicate]使用 PHP 创建 JSON 对象 [重复]
【发布时间】:2013-12-21 08:28:10
【问题描述】:

如何使用 PHP 实现或创建这种类型的 JSON 对象?

{ 
    "label": "Devices per year",
    "data": [
        [1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]
    ]
}

经过多次尝试,我没有找到解决方案。 例如我试过这个:

$arrayDateAndMachine = array(
    "1999"=>3.0, 
    "2000"=>3.9
);   

$arr = array(
    "label" => "Devices per year", 
    "data" => $arrayDateAndMachine
);

var_dump(json_encode($arr));

【问题讨论】:

  • 那没用...?你得到什么输出?

标签: php json


【解决方案1】:

如果您只想将其声明为 JSON 而不是使用 json_encode,则执行此类操作应该可行。这也消除了为里面的每个数组声明多个变量的需要。但只有当数据数组的内容是有限的时,这才是一个可行的解决方案。

$json_string = '{ 
"label": "Devices per year",
"data": [
    [1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]
]}';

【讨论】:

    【解决方案2】:

    我更喜欢以下语法,它可以获得所需的结果并且易于阅读:

    $ar = array(
                "label" => "Devices per years",
                "data" => array(array(1999, 3.0), array(2000, 3.9) )
            );
    
    var_dump(json_encode($ar));
    

    唯一的区别是输出中的“3.0”被渲染为“3”。如果您需要结尾的“.0”,您可以用引号将这些值括起来。

    【讨论】:

      【解决方案3】:

      json 中的方括号 [] 是数组,所以你必须这样做

      <?php
      
      $arrayDateAndMachine = array( 
          array(1999, 3.0), 
          array(2000, 3.9),
      );
      
      $arr = array("label" => "Devices per year", 
                   "data" => $arrayDateAndMachine);
      
      var_dump(json_encode($arr));
      

      【讨论】:

        【解决方案4】:
        $obj = new stdClass();
        $obj->label="Devices per year";
        $obj->data = array(
            array('1999','3.0'),
            array('2000','3.9'),
            //and so on...
        );
        
        echo json_encode($obj);
        

        【讨论】:

        • 如果你得到错误“stdClass not found”,替换 new stdClass();与 \stdClass(); (注意类名前面的 \)。
        【解决方案5】:

        试试这个

        $arrayDateAndMachine = array(   array("1999","3.0"), 
                                        array("2000","3.9")
                                        );
        

        【讨论】:

        • 这会将数组中的值作为字符串而不是预期结果中的数字
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-19
        • 2012-12-06
        • 1970-01-01
        • 2018-07-29
        • 1970-01-01
        相关资源
        最近更新 更多