javascript - 导入 Json 格式的值以使用 Chart.js 创建条形图

标签 javascript json chart.js

我想可视化来 self 的家庭自动化中间件 (ioBroker) 的数据。 数据可以通过 URL 作为 json 字符串加载。

当我将数据直接复制到脚本中时,它可以工作,但我想动态加载数据。 加载本身有效(在控制台中获取 json 字符串),但是如何将变量“out”的内容获取到 myChartConfig 声明中? 尝试了很多事情但没有成功。

Json - url 提供的文本:

{labels : ['2017-10','2017-9','2017-8','2017-7','2017-6','2017-5','2017-4','2017-3','2017-2','2017-1','2016-12','2016-11'], datasets : [{label: 'PV Eigenverbr.', data: [235,341,0,0,0,0,0,0,0,0,0,0], backgroundColor:['LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ']},{label: 'PV Produktion', data: [473,775,96,0,0,0,0,0,0,0,0,0], backgroundColor:['LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue']},{label: 'PV Einspeisung', data: [238,433,0,0,0,0,0,0,0,0,0,0], backgroundColor:['LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen']},{label: 'Bezug aus Netz', data: [572,575,0,0,0,0,0,0,0,0,0,0], backgroundColor:['red','red','red','red','red','red','red','red','red','red','red','red']}]}

脚本:

<script>

   url='http://192.168.0.201:8087/getPlainValue/javascript.1.Statistiken.12_Monate.stromAuswertungGesamt';
    var out;
    fetch(url)
    .then(res => res.json())
    .then((out) => {
        console.log('Checkout this JSON! ', out);
        // output of console is exactly the json string
    })
    .catch(err => { throw err });

    var myContext = document.getElementById("myChart");
    var myChartConfig = {
      type: 'bar',
      /this is schould be replaced by "out" 
      data: {labels : ['2017-10','2017-9','2017-8','2017-7','2017-6','2017-5','2017-4','2017-3','2017-2','2017-1','2016-12','2016-11'], datasets : [{label: 'PV Eigenverbr.', data: [235,341,0,0,0,0,0,0,0,0,0,0], backgroundColor:['LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ','LightSeaGreen ']},{label: 'PV Produktion', data: [473,775,96,0,0,0,0,0,0,0,0,0], backgroundColor:['LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue','LightSkyBlue']},{label: 'PV Einspeisung', data: [238,433,0,0,0,0,0,0,0,0,0,0], backgroundColor:['LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen','LightGreen']},{label: 'Bezug aus Netz', data: [572,575,0,0,0,0,0,0,0,0,0,0], backgroundColor:['red','red','red','red','red','red','red','red','red','red','red','red']}]}
    }
  var myChart = new Chart(myContext, myChartConfig);
</script>

有什么提示吗?

最佳答案

你不能这样做。 fetch(url) 返回一个 promise ,这意味着该函数不一定在您使用返回值之前完成。 然后,您必须将其余代码放入第二个代码中。 可以很容易地看到,如果在 then-catch 链下使用 console.log(out) ,它会打印 console.log('Checkout this JSON! ', out) 之前的值,并且会注销 未定义

关于javascript - 导入 Json 格式的值以使用 Chart.js 创建条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47378789/

相关文章:

javascript - 使用简单的 'setTimeOut' 功能暂停基本 slider 的正确 jQuery(或 javaScript)代码是什么?

php - 如何从 javascript 函数调用 php 函数并同时传递变量?

javascript - Pepper naoqi 2.5 onConsoleMessage null

javascript - 无法读取 JSON 文件

php - "Javascript"能否解密由 PHP 加密的数据?

JavaScript/jQuery : Offset a <DIV> based on another <DIV> height after page load

c# - 带有 api key 身份验证的 Swagger 客户端生成

Angular 5 和 chart.js ts 错误

javascript - 如何仅在 Chart.Js 2.8.0 中的弧形内显示文本?

javascript - 如何修改Chartjs 2条形图中的条形宽度