Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Google Charts , getting data from JSON

I am currently trying to build a chart, that contains financial values as well as dates, which however seem to be UNIX timestamps, however I am unable to get these into Google Charts.

Here is my current code in which I specify the key to be prices:

  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

  <script src="https://www.gstatic.com/charts/loader.js"></script>

  <script type="text/javascript">
     google.charts.load('current', {'packages':['corechart']});
     google.charts.setOnLoadCallback(drawChart);
     function drawChart() {
  var jsonData = $.ajax({
     url: "prices.json",
     dataType: "json",
     async: false
  }).responseJSON;
  var key = "prices";
  var ar = Object.entries(jsonData[key]).map(([a, b]) => [a, Number(b)]);
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'date');
  data.addColumn('number', 'value');
  data.addRows(ar);
  var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
  chart.draw(data, {width: 800, height: 400});
  }
  </script>
  <div id="chart_div" style="width: 100%; height: 100%"></div>

And here the contents of the JSON file:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

{
    "prices": [
    [
        1660694400000,
        1.3773296984378443
    ],
    [
        1660780800000,
        1.4831769984789143
    ],
    [
        1660867200000,
        1.4806663666679991
    ],
    [
        1660897499000,
        1.3085747624144402
    ]
    ]
}

Using everything you see here above I am still just getting an empty chart

enter image description here

Some expert help would be greatly appreciated, thank you very much

>Solution :

You are parsing your JSON incorrectly which will give a NaN as you are trying to parse an array to a Number

Here is the correct way to parse 1st key of prices as Date and second as Number

Object.entries(jsonData["prices"]).map(([a, b]) => [new Date(b[0]).toLocaleDateString("en-US"), b[1]]]);

Also, you need to encapsulate the logic in a drawChart function as it is used as a callback (if you haven’t done already)


Here is the Working Code below

google.charts.load('current', {
  'packages': ['corechart']
});
google.charts.setOnLoadCallback(drawChart);

function drawChart() {
  var jsonData = {
    "prices": [
      [
        1660694400000,
        1.3773296984378443
      ],
      [
        1660780800000,
        1.4831769984789143
      ],
      [
        1660867200000,
        1.4806663666679991
      ],
      [
        1660897499000,
        1.3085747624144402
      ]
    ]
  };
  var key = "prices";
  var ar = Object.entries(jsonData["prices"]).map(([a, b]) => [new Date(b[0]).toLocaleDateString("en-US"), b[1]]);
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'date');
  data.addColumn('number', 'value');
  data.addRows(ar);
  var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
  chart.draw(data, {
    width: 800,
    height: 400
  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script src="https://www.gstatic.com/charts/loader.js"></script>

<div id="chart_div" style="width: 100%; height: 100%"></div>
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading