【问题标题】:Generate JSON for Google Charts using PHP使用 PHP 为 Google Charts 生成 JSON
【发布时间】:2016-12-07 14:12:45
【问题描述】:

我正在关注以下指南: https://developers.google.com/chart/interactive/docs/php_example

他们为 json 示例提供了一个 json sn-p。你如何用php构建这个?通常只是使用 json_encode() 将数组转换为 json,但这次似乎您也需要一个对象。任何人都可以澄清这一点吗?

json sn-p:

{
  "cols": [
    {"id":"","label":"Topping","pattern":"","type":"string"},
    {"id":"","label":"Slices","pattern":"","type":"number"}
  ],
  "rows": [
    {"c":[{"v":"Mushrooms","f":null},{"v":3,"f":null}]},
    {"c":[{"v":"Onions","f":null},{"v":1,"f":null}]},
    {"c":[{"v":"Olives","f":null},{"v":1,"f":null}]},
    {"c":[{"v":"Zucchini","f":null},{"v":1,"f":null}]},
    {"c":[{"v":"Pepperoni","f":null},{"v":2,"f":null}]}
  ]
}

到目前为止我所拥有的:

$obj = new stdClass();
$obj->cols= array(
    array("id"=>"", "label"=>"Topping", "pattern"=>"", "type"=>"string"), 
    array("id"=>"", "label"=>"Slices", "pattern"=>"", "type"=>"string"));
$obj->rows = array(
    array()
);

echo json_encode($obj);

有没有人知道如何完成这个 php 表示?

编辑: 我的回声输出:

{"cols":[{"id":"","label":"Topping","pattern":"","type":"string"},{"id":"","label":"Slices","pattern":"","type":"string"}],"rows":[[]]}

【问题讨论】:

  • 那么你的代码的结果是什么?
  • PHP 关联数组会转换成 JSON 对象,你不需要stdClass
  • @JulianKuchlbauer,对不起。我已经更新了问题并插入了我的输出
  • @ndm,那么你会在数组上使用什么结构?
  • @NDM 如果你想让你的代码自我记录,你没有理由不使用stdClass

标签: php json google-visualization


【解决方案1】:

这段代码应该可以工作:

<?php
$obj = array("cols"=>array(
    array("id"=>"", "label"=>"Topping", "pattern"=>"", "type"=>"string"), 
    array("id"=>"", "label"=>"Slices", "pattern"=>"", "type"=>"string")),
    "rows"=>array(
    array("c"=>array(array("v"=>"Mushrooms", "f"=>null), array("v"=>3, "f"=>null))),
    array("c"=>array(array("v"=>"Onions", "f"=>null), array("v"=>1, "f"=>null))),
    array("c"=>array(array("v"=>"Olives", "f"=>null), array("v"=>1, "f"=>null))),
    array("c"=>array(array("v"=>"Zucchini", "f"=>null), array("v"=>1, "f"=>null))),
    array("c"=>array(array("v"=>"Pepperoni", "f"=>null), array("v"=>2, "f"=>null))),
    )
);

echo json_encode($obj);
?>

【讨论】:

  • 我知道,但他想要一个代码,它只适用于这个特定问题,这就是我提供的。对您肯定更复杂的答案提出我的观点。
【解决方案2】:

PHP 关联数组将转换为 JSON 格式的对象,因此不需要 stdClass。您已经获得了 80% 的结构,所以这里有一些建议:

$data = [
    'cols' => [],
    'rows' => [],
];

将导致:

{
    'cols': [],
    'rows': [],
}

为了获取 JSON 数组,不要给值提供键:

$data = [
    'c' => [
        [ // <- no key here
            'v' => 'Mushroom', 
            'f' => null
        ],
        [ // <- no key here
            'v' => '3', 
            'f' => null
        ],
    ],
    // ...
];

会给你一个数据行:

{
    "c": [ // <- we got an actual array here because there was no key
        {
            "v":"Mushrooms",
            "f":null
        },
        {
            "v":3,
            "f":null
        }
    ]
}

【讨论】:

  • 啊,现在我知道你在说什么了。我不知道我可以这样使用数组。我认为每个 {} 都需要成为一个对象。点赞!
  • 我认为您必须将 null 包含在 'null' 之类的引号中,否则您将在输出中一无所获
  • 否:如果将其用引号括起来,您将在 JSON 中获得字符串 'null',而不是 null 常量。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2015-10-01
  • 2015-09-20
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多