Форматирование файла JSON с помощью PHP для Google Charts

Я пытаюсь получить информацию из моей базы данных в диаграмму Google.
Для этого мне нужно отформатировать файл JSON в соответствии со спецификациями Google (находится здесь https://developers.google.com/chart/interactive/docs/reference#dataparam )

Это должно быть отформатировано как следующий пример:

{
cols: [
{label: 'NEW A', type: 'string'},
{label: 'B-label', type: 'number'},
{label: 'C-label', type: 'date'}
],
rows: [
{c:[
{v: 'a'},
{v: 1.0, f: 'One'},
{v: new Date(2008, 1, 28, 0, 31, 26), f: '2/28/08 12:31 AM'}
]},
{c:[
{v: 'b'},
{v: 2.0, f: 'Two'},
{v: new Date(2008, 2, 30, 0, 31, 26), f: '3/30/08 12:31 AM'}
]},
{c:[
{v: 'c'},
{v: 3.0, f: 'Three'},
{v: new Date(2008, 3, 30, 0, 31, 26), f: '4/30/08 12:31 AM'}
]}
]
}

Однако, когда я пытаюсь достичь этого, я не могу получить JSON точно так же.
Мой код PHP:

$result = mysqli_query($dbConnection, $sql);

$json['cols'][] = array("label" => "year-week", "type" => "string");
$json['cols'][] = array("label" => "# non-bundle games given", "type" => "number");
$json['cols'][] = array("label" => "Users joined", "type" => "number");
$json['cols'][] = array("label" => "Users left", "type" => "number");

if ($result->num_rows > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$json['rows'][]['c'] = array_values($row);
}
}

// CLOSE CONNECTION
mysqli_close($dbConnection);

echo json_encode($json);

Это дает мне следующее:

{
"cols": [

{
"label": "year-week",
"type": "string"},
{
"label": "# non-bundle games given",
"type": "number"},
{
"label": "Users joined",
"type": "number"},
{
"label": "Users left",
"type": "number"}
],

"rows": [
{

"c":

[
"201431",
"3",
"45",
"1"]

},
{

"c":

[
"201432",
"3",
"0",
"1"]

}
]
}

Как видите, часть строк не права.
Я пробовал несколько способов создать код PHP, но сейчас я только догадываюсь.
Любой совет о том, как написать код PHP для вывода в соответствии со спецификациями Google?

0

Решение

почему не используете json_encode ()? я думаю, что это сделает правильный JSON из массива!

http://php.net/manual/en/function.json-encode.php

1

Другие решения

В Json:

[] это массив JSON

{} это объект JSON

Если некоторые индексы или значения не имеют кавычек, это не json это javascript object,

Таким образом, вы не можете использовать json_encode, вы должны вручную вывести строковое представление объекта.

Кроме того, вы просто возвращаете значения массива как один массив, но его нужно разделить, используя ключ в качестве индекса.

foreach($row as $key => $value)
{
echo "$key: \'$value\'";
}
1

Используйте PHP для создания списка, скажем, любой массив значений, которые вы передадите в график. JSON, переданный в API для построения графиков, не минимизирует наличие пробелов в вашем коде, поэтому циклически просматривайте результаты, затем вставляйте их в конец и получайте все, что возвращалось в методе.

    function prepMyGraphValues(){
//Initialize here
$myData = [];

//Do SQL stuff here
$sql = ...

//Have a counter
$count = 0;

//Loop through results
while($data=$sql->fetch_assoc()){

//Loop Thru the results adding to$myData
if ($result->num_rows > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$myData[] = "{c:[
{v: $count.0, f: 'One'},
{v: new Date($data[prep_date]), f: '$data[prep_date2]'}
]}";
}
}
}

return implode(',',$myData);

}

Это не аккуратно, но может работать на вас

0
По вопросам рекламы [email protected]