Формат выходного файла JSON

Я использую 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>
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
195
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Пожалуйста, попробуй

// change this
$output_data[] = array(

// to this
$output_data['dps'][] = array(

Это будет перезаписывать $output_data['dps'] каждый раз в цикле while.

Dimitris Filippou 25.06.2018 14:54

Извините, я исправил опечатку. Копирование и вставка - не всегда ваш друг.

Mr Glass 25.06.2018 15:11

Обновление перезаписывает все данные, поэтому файл JSON остается пустым с использованием обновленного кода.

Leon Claassen 25.06.2018 15:16

@LeonClaassen, $output_data['dps'][] добавляет элементы в конец массива. Он не должен ничего перезаписывать. Единственная разница между вашим исходным кодом и моим кодом - это добавление желаемого элемента ['dps'] в начало массива, который вы хотите вывести как json.

Mr Glass 25.06.2018 15:19

Моя плохая ... Теперь она работает. Спасибо. Я сделал опечатку. Чтобы добавить Callback (), нужно ли мне просто продлить обновление?

Leon Claassen 25.06.2018 15:21

@LeonClaassen, опечатка? Я сделал то же самое ;-)

Mr Glass 25.06.2018 15:23

Спасибо @Mr Glass. Единственное, что еще нужно добавить в файл, - это обратный вызов (в начале, а затем при закрытии).

Leon Claassen 25.06.2018 15:25

@LeonClaassen, получение json на callback() зависит от того, как вы используете json. Это вызов AJAX? Загружает ли он json на страницу до ее рендеринга?

Mr Glass 25.06.2018 15:28

Я добавил дополнительный код. Графики создаются с помощью javascript. Я просто не понимаю, почему файл json должен соответствовать этому формату: callback ({"dps": [{"Division": "Xaxis VALUE", "units": Yaxis VALUE}]})

Leon Claassen 25.06.2018 15:34

Вам нужно будет изменить функцию callback(), чтобы анализировать полученные данные json. Что-то вроде data = JSON.parse(data); в первой строке функции должно это делать.

Mr Glass 25.06.2018 16:22

Что вам нужно сделать, так это заключить созданный вами массив в новый массив с ключом с именем dps.

Итак, после вашего цикла while вы должны сделать что-то вроде этого

$json_data['dps']=$output_data;

return json_encode($json_data, JSON_NUMERIC_CHECK);

Спасибо @Dimitris, пробовал это, но, похоже, не добавляет желаемые теги в начало и конец. Мне нужна вся строка обратного вызова ({"dps": &})

Leon Claassen 25.06.2018 15:16

Другие вопросы по теме