来自雅虎财经API语法错误的JSON作为参数提供给谷歌图表表



我使用雅虎财经API从中获取数据,然后我想在谷歌图表中输入数据,但似乎我对JSON对象有问题。所以,我尝试了我读到的所有内容,但不幸的是仍然没有成功。
错误

index.html:1 未捕获的语法错误:JSON 中的意外标记 u 位于 位置 0 at JSON.parse () at drawChart (main.js:18) 在 Object.google.a.c.Ac(加载器.js:155) 在 Object.google.a.c.Pa(加载器.js:155) 在 F (装载机.js:152) at Object.google.l.m.kj (loader.js:229) at Object.google.l.m.ce (loader.js:229) 装载机时.js:228

JavaScript

google.charts.load('current', {
'packages': ['corechart']
});
google.charts.setOnLoadCallback(drawChart);
var options = {
'title': 'Today is not my day',
'width': 400,
'height': 300
};
var input = getData();
function drawChart() {
var chartData = google.visualization.arrayToDataTable(JSON.parse(input));
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(chartData, options);
};
function getData() {
dataArray = [
['Name', 'Volume'],
];
var BASE_URL = "https://query.yahooapis.com/v1/public/yql?q=";
var yql_query = 'select * from yahoo.finance.quote where symbol in ("YHOO","AAPL","GOOG","MSFT")';
var yql_query_str = encodeURI(BASE_URL + yql_query);
var result = yql_query_str + "&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
$.getJSON(result, function(data){
var object = data.query.results.quote;
for (var i = 0; i < object.length; i++) {
var currentObj = object[i];
var pushedArray = [currentObj.Name, parseFloat(currentObj.Volume)];
dataArray[i+1] = pushedArray;
}
return dataArray;
});
};

.HTML

<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.min.css">
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!-- <script type="text/javascript" src="js/request.js"></script> -->
<script type="text/javascript" src="js/main.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12" id="chart_div"></div>
</div>
</div>
<script type="text/javascript" src="bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
</body>
</html>

如上所述,getData()同步返回undefined,所以在drawChart()内部你实际上是在尝试JSON.parse(undefined),这会导致你收到的SyntaxError(JSON.parse()强制undefined到字符串"undefined",这是无效的 JSON)。

dataArray在请求返回从回调中返回$.getJSON();目前无法在drawChart()函数内部访问它。

您需要重构代码,以便在$getJSON()请求返回后调用drawChart(),以便它能够以词法方式或通过闭包访问dataArray

相关内容

最新更新