Формат выходного файла JSON - PullRequest
0 голосов
/ 25 июня 2018

Я использую 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>

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

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

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

$json_data['dps']=$output_data;

return json_encode($json_data, JSON_NUMERIC_CHECK);

0 голосов
/ 25 июня 2018

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

// change this
$output_data[] = array(

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