0

Although ThingSpeak have excellent charts, I would like to get data from ThingSpeak and make my own charts using Google Charts. When getting a "feed" from ThingSpeak, the "feed" is a JSON object like this one:

{
  "channel":
  {
     "id": 9,
     "name": "my_house",
     "description": "Netduino Plus connected to sensors around the house",
     "latitude": "40.44",
     "longitude": "-79.996",
     "field1": "Light",
     "field2": "Outside Temperature",
     "created_at": "2010-12-13T20:20:06-05:00",
     "updated_at": "2014-02-26T12:43:04-05:00",
     "last_entry_id": 6060625
  },
  "feeds":
       [
          {
            "created_at": "2014-02-26T12:42:49-05:00",
            "entry_id": 6060624,
            "field1": "188",
            "field2": "25.902335456475583"
          },
          {
            "created_at": "2014-02-26T12:43:04-05:00",
            "entry_id": 6060625,
            "field1": "164",
            "field2": "25.222929936305732"
          }
      ]
  }

I've spent quite some time searching for a way to extract the "created_at" and "field1" (and perhaps "field2") data to a table/array, but I haven't been able to figure it out. I'm aiming at something along these lines:

[
['created_at',                'field1', 'field2'],
['2014-02-26T12:42:49-05:00', 188,      25.902335456475583],
['2014-02-26T12:43:04-05:00', 164,      25.222929936305732]
]

How can I go about doing this?

1 Answers1

0

Here's how I would do it. (Note: I used code from here to determine how to get the headers: How to iterate through property names of Javascript object?)

var j = {
  "channel":
  {
     "id": 9,
     "name": "my_house",
     "description": "Netduino Plus connected to sensors around the house",
     "latitude": "40.44",
     "longitude": "-79.996",
     "field1": "Light",
     "field2": "Outside Temperature",
     "created_at": "2010-12-13T20:20:06-05:00",
     "updated_at": "2014-02-26T12:43:04-05:00",
     "last_entry_id": 6060625
  },
  "feeds":
       [
          {
            "created_at": "2014-02-26T12:42:49-05:00",
            "entry_id": 6060624,
            "field1": "188",
            "field2": "25.902335456475583"
          },
          {
            "created_at": "2014-02-26T12:43:04-05:00",
            "entry_id": 6060625,
            "field1": "164",
            "field2": "25.222929936305732"
          }
      ]
  }

var results = [];
var feeds = j.feeds;

var headers = [];
for (var key in feeds[0]) {
    headers.push(key);
}
results.push(headers);

for (var x = 0; x < feeds.length; x++) {
    var row = [];
    var feed = feeds[x];
    for (var y = 0; y < headers.length; y++) {
        var header = headers[y];
        row.push(feed[header]);
    }
    results.push(row);
}

console.log(results);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Community
  • 1
  • 1
Cameron
  • 694
  • 4
  • 16