Javascript 来自yahoo financial API SyntaxError的JSON作为参数提供给google图表表

Javascript 来自yahoo financial API SyntaxError的JSON作为参数提供给google图表表,javascript,json,yahoo-finance,Javascript,Json,Yahoo Finance,我使用yahoo financial API从中获取数据,然后我想在google图表中输入数据,但似乎JSON对象有问题。因此,我尝试了我读到的所有东西,但不幸的是仍然没有成功。 错误 html:1未捕获的语法错误:JSON中的意外标记u位于 位置0 在JSON.parse()处 在图纸上(main.js:18) 在Object.google.a.c.Ac(loader.js:155) 在Object.google.a.c.Pa(loader.js:155) 在f(loader.js:152)

我使用yahoo financial API从中获取数据,然后我想在google图表中输入数据,但似乎JSON对象有问题。因此,我尝试了我读到的所有东西,但不幸的是仍然没有成功。
错误

html:1未捕获的语法错误:JSON中的意外标记u位于 位置0 在JSON.parse()处 在图纸上(main.js:18) 在Object.google.a.c.Ac(loader.js:155) 在Object.google.a.c.Pa(loader.js:155) 在f(loader.js:152) 在Object.google.l.m.kj(loader.js:229) 在Object.google.l.m.ce(loader.js:229) 在loader.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;
  });
};
google.charts.load('current'{
“包”:[“核心图表”]
});
google.charts.setOnLoadCallback(drawChart);
变量选项={
“标题”:“今天不是我的日子”,
“宽度”:400,
‘高度’:300
};
var input=getData();
函数绘图图(){
var chartData=google.visualization.arrayToDataTable(JSON.parse(input));
var chart=new google.visualization.PieChart(document.getElementById('chart_div');
图表。绘图(图表数据、选项);
};
函数getData(){
数据数组=[
[“名称”,“卷”],
];
var BASE_URL=”https://query.yahooapis.com/v1/public/yql?q=";
var yql_query='select*from yahoo.finance.quote,其中符号为(“YHOO”、“AAPL”、“GOOG”、“MSFT”);
var yql_query_str=encodeURI(基本URL+yql_query);
var result=yql\u query\u str+“&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys”;
$.getJSON(结果、函数(数据){
var object=data.query.results.quote;
对于(变量i=0;i
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)
,这导致您收到的
语法错误(
JSON.parse()
undefined
转换为字符串
“undefined”
,这是无效的JSON)

请求返回后,
dataArray
从回调中返回到
$.getJSON()
;当前无法在
drawChart()函数中访问它

您需要重构代码,以便在
$getJSON()
请求返回后调用
drawChart()
,这样它就可以通过词汇或闭包访问
dataArray