Я использую Canvasjs Charts для построения графиков из PHP / MySQL. Все работает, как ожидалось, за исключением создания моего файла JSON.
Canvasjs требует, чтобы файл JSON выглядел следующим образом:
callback({
"dps":
[{"division":"Xaxis VALUE","units":Yaxis VALUE}]
})
Однако при создании моего файла JSON это
[{"division":"Xaxis VALUE","units":Yaxis VALUE}]
Все, что я хочу знать, это как добавить открывающий тег и закрывающий тег в файл sjon из моего скрипта.
Вот последняя часть моего кода, которая создает файл JSON:
$output_data= array();
while($row = mysqli_fetch_array($result))
{
$output_data[] = array(
'division' => $row["division"],
'units' => $row["units"]
);
}
return json_encode($output_data, JSON_NUMERIC_CHECK);
echo json_encode($output_data, JSON_NUMERIC_CHECK);
}
$file_name = 'myresult2'.'.json';
if (file_put_contents($file_name, get_data()))
{
echo $file_name. 'file created';
}
else
{
echo 'Error';
}
?>
Дополнительная информация: Это код, который генерирует график.
<script>
var chart = null;
var dataPoints = [];
window.onload = function() {
chart = new CanvasJS.Chart("chartContainer", {
animationEnabled: true,
theme: "light",
title: {
text: "Graph Header"
},
axisY: {
title: "% Verified",
titleFontSize: 12,
labelFontSize: 12,
valueFormatString: "#.##%"
},
axisX: {
title: "Division",
titleFontSize: 12,
labelFontSize: 12
},
data: [{
type: "column",
yValueFormatString: "#.##%",
dataPoints: dataPoints
}]
});
$.getJSON("myresult.json?callback=?", callback);
}
function callback(data) {
for (var i = 0; i < data.dps.length; i++) {
dataPoints.push({
label: data.dps[i].division,
y: data.dps[i].units
});
}
chart.render();
}
</script>






Пожалуйста, попробуй
// change this
$output_data[] = array(
// to this
$output_data['dps'][] = array(
Извините, я исправил опечатку. Копирование и вставка - не всегда ваш друг.
Обновление перезаписывает все данные, поэтому файл JSON остается пустым с использованием обновленного кода.
@LeonClaassen, $output_data['dps'][] добавляет элементы в конец массива. Он не должен ничего перезаписывать. Единственная разница между вашим исходным кодом и моим кодом - это добавление желаемого элемента ['dps'] в начало массива, который вы хотите вывести как json.
Моя плохая ... Теперь она работает. Спасибо. Я сделал опечатку. Чтобы добавить Callback (), нужно ли мне просто продлить обновление?
@LeonClaassen, опечатка? Я сделал то же самое ;-)
Спасибо @Mr Glass. Единственное, что еще нужно добавить в файл, - это обратный вызов (в начале, а затем при закрытии).
@LeonClaassen, получение json на callback() зависит от того, как вы используете json. Это вызов AJAX? Загружает ли он json на страницу до ее рендеринга?
Я добавил дополнительный код. Графики создаются с помощью javascript. Я просто не понимаю, почему файл json должен соответствовать этому формату: callback ({"dps": [{"Division": "Xaxis VALUE", "units": Yaxis VALUE}]})
Вам нужно будет изменить функцию callback(), чтобы анализировать полученные данные json. Что-то вроде data = JSON.parse(data); в первой строке функции должно это делать.
Что вам нужно сделать, так это заключить созданный вами массив в новый массив с ключом с именем dps.
Итак, после вашего цикла while вы должны сделать что-то вроде этого
$json_data['dps']=$output_data;
return json_encode($json_data, JSON_NUMERIC_CHECK);
Спасибо @Dimitris, пробовал это, но, похоже, не добавляет желаемые теги в начало и конец. Мне нужна вся строка обратного вызова ({"dps": &})
Это будет перезаписывать
$output_data['dps']каждый раз в цикле while.