Error: Not an array in Google charts

Error: Not an array in Google charts

我已经设法通过输出以下字符串从数据库输出结果:

[['Grupo de edad','Mujeres','Hombres'],['Menos de 40',2,0],['De 40 a 49',7,3],['De 50 a 59',8,5],['De 60 a 69',20,25],['De 70 y más',6,10]]

如果我将此文本准确粘贴到以下内容中:

var data = google.visualization.arrayToDataTable([['Grupo de edad','Mujeres','Hombres'],['Menos de 40',2,0],['De 40 a 49',7,3],['De 50 a 59',8,5],['De 60 a 69',20,25],['De 70 y más',6,10]]);

我可以正确地看到图表。

但是,如果我使用 jQuery .get() 函数获取数据,然后将数据传递给 google 可视化函数,如下所示:

google.load("visualization", "1.1", {packages:["corechart","bar"]});
google.setOnLoadCallback(drawVisualization);

function drawVisualization() {
    $.get("{{URL::action('ChartController@investigadoresEdadSexo')}}", function(datos, status){
        var data = google.visualization.arrayToDataTable(datos);
        var options = {
            //many options ...
        };

        var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
        chart.draw(data, options);
    });//End of jQuery .get
}

我得到

Not an Array error

我知道我正在传递一个字符串,但如果我通过键入(复制和粘贴)google.visualization.arrayToDataTable() 函数测试了该字符串,为什么它不起作用?或者我如何让该函数将该字符串解释为数组?

我该如何解决这个问题?

尝试使用 JSON.parsedatos 转换为数组:

var data = google.visualization.arrayToDataTable(JSON.parse(datos));

更新

在解析 datos 引号之前 ' 应转换为 ":

datos = datos.replace(/'/g, '"');
var data = google.visualization.arrayToDataTable(JSON.parse(datos));

当您将第一个文本直接粘贴到您没有粘贴文本的函数中时,您正在创建一个由 arrayToDataTable 函数使用的数组元素。

正如@phts 所指出的,您必须解析您的字符串以从中创建一个数组元素。将 dataType 参数设置为 "json",它会得到一个 JSON 对象作为结果。

非常感谢你!在使用 jsp...

生成数组列表时,我在代码之前也遇到了非常奇怪的行

如果有人对他们的 jsp 代码有疑问,我就是这样做的。

Connection con = (Connection) session.getAttribute("conexao");
Locale.setDefault(Locale.GERMAN);
if (con == null) {
    response.sendRedirect("fimsessao.html");
    return;
}
request.setCharacterEncoding("UTF-8");
Statement st;
ResultSet rs;
String cod = String.valueOf(session.getAttribute("cod"));

//Variáveis de Insert e Update
SimpleDateFormat dt = new SimpleDateFormat("yyyy/MM");
String dates = null;
double peso = 0;
ArrayList relPeso = new ArrayList();
relPeso.add("['Datas'");
relPeso.add("'Peso']");
try {

    String query = "SELECT `data`, `peso` FROM asaacademia.tblavaliacaofis WHERE idUsuario = '" + cod + "';";
    PreparedStatement pstm = con.prepareStatement(query);
    rs = pstm.executeQuery();
    while (rs.next()) {
        dates = dt.format(rs.getTimestamp(1));
        peso = rs.getDouble(2);
        relPeso.add("['" + dates + "'");
        relPeso.add(String.valueOf(peso) + "]");
    }

    out.print(relPeso);
    System.out.print(relPeso);


} catch (Exception e) {
    e.printStackTrace();
}

也使用这个 jQuery.parseJSON(queryObject) 作为依据:

As of jQuery 3.0, $.parseJSON is deprecated. To parse JSON objects, use the native JSON.parse method instead.

来源:http://api.jquery.com/jquery.parsejson/

这是我的 HTML 代码:

<div class="well">
    <script type="text/javascript">
        google.load("visualization", "1", {packages:["corechart"]});
        google.setOnLoadCallback(drawChart);
        //Puxar os dados do relatório de peso.
        var queryObject = "";
        $.ajax({
            url: 'peso.jsp',
            success: function (data) {
                queryObject = data;
                //alert(data);
            },
            error: function (xhr, type) {
                alert('server error occoured')
            }
        });

        function drawChart() {
            // Create and populate the data table. [['Datas', 'Peso'], ['2016/05', 95.0], ['2016/05', 93.0], ['2016/05', 92.0]]
            //var data = google.visualization.arrayToDataTable([['Datas', 'Peso'], ['2016/05', 95.0], ['2016/05', 93.0], ['2016/05', 92.0]]);
            //jQuery.parseJSON()
            queryObject = queryObject.trim();
            queryObject = queryObject.replace(/'/g, '"');
            queryObject = jQuery.parseJSON(queryObject);
            var data = google.visualization.arrayToDataTable(queryObject);
            var options = {
                vAxis: { title: 'Peso em KG' }
            };
            // Create and draw the visualization.
            new google.visualization.LineChart(
            document.getElementById('divPeso')).draw(data, options);
        }
    </script>
    <h3>Peso</h3>
    <div id="divPeso"></div>
</div>