16

I am trying to fetch the JSON data from an url.It is in the form of object i have to push the object data into array.

var my_json;
$.getJSON("https://api.thingspeak.com/channels/"+did+"/feeds.json?api_key="+apikey+"&results=300", function(json1) {
console.log(json1);
json1.feeds.forEach(function(feed,i){
    console.log("\n The details of " + i + "th Object are :  \nCreated_at: " + feed.created_at + "\nEntry_id:" + feed.entry_id + "\nField1:" + feed.field1 + "\nField2:" + feed.field2+"\nField3:" + feed.field3);      
    my_json = feed;
    console.log(my_json); //Object {created_at: "2017-03-14T01:00:32Z", entry_id: 33358, field1: "4", field2: "4", field3: "0"}
    var data = [];
    for(var i in my_json)
    data.push(my_json [i]);
    console.log(data); //["2017-03-14T01:00:32Z", 33358, "4", "4", "0"]
}); 

I have tried as above in my_json var i have the json data in the form of object now i have to store that object in to var data as an array in the below format

[{
        "created_at": "2017-03-14T01:00:32Z",
        "entry_id": 33358,
        "field1": "4",
        "field2": "4",
        "field3": "0"
 },
 {
        "created_at": "2017-03-14T22:54:43Z",
        "entry_id": 33398,
        "field1": "84",
        "field2": "32",
        "field3": "0"
 }];

Can anyone help me how to do it??Thankyou

5
  • how does the server return the json1 object? how is it formatted? can you post the output of console.log(json1);
    – Emmanuel
    Commented Apr 12, 2017 at 6:29
  • Couldn't you just push the feed? data.push(feed);
    – Darlesson
    Commented Apr 12, 2017 at 6:30
  • You have only one object in 'my_json'.
    – Mamun
    Commented Apr 12, 2017 at 6:40
  • agree with @Darlesson. Simply use data.push(feed), no special handling required.
    – psycho
    Commented Apr 12, 2017 at 6:45
  • No i have n no of objects in my_json@Mamun
    – Anusha
    Commented Apr 12, 2017 at 7:02

3 Answers 3

53

Observation

  • If there is a single object and you want to push whole object into an array then no need to iterate the object.

Try this :

var feed = {created_at: "2017-03-14T01:00:32Z", entry_id: 33358, field1: "4", field2: "4", field3: "0"};

var data = [];
data.push(feed);

console.log(data);

Instead of :

var my_json = {created_at: "2017-03-14T01:00:32Z", entry_id: 33358, field1: "4", field2: "4", field3: "0"};

var data = [];
for(var i in my_json) {
    data.push(my_json[i]);
}

console.log(data);

4
  • I have n no.of objects not a single object@Rohit
    – Anusha
    Commented Apr 12, 2017 at 6:58
  • 2
    @Anusha But how it is possible. either you can have array of objects [{},{},{}] or object of arrays {[],[],[]}. Commented Apr 12, 2017 at 7:03
  • your answer solved my issue tq i made small mistake now its working fine tq.@Rohit
    – Anusha
    Commented Apr 12, 2017 at 7:07
  • 3
    @RohitJindal how is it possible if I have like this, dataObj={ "id": 1 , "arr" : [ ] } and another object like secondObj = { id: 2 , name: "xy" , area: "area1 " } I want to push secondObj to that arr inside dataObj . Actually I am on TS, it shows type error. Commented Nov 27, 2020 at 7:37
1

You need to have the 'data' array outside of the loop, otherwise it will get reset in every loop and also you can directly push the json. Find the solution below:-

var my_json;
$.getJSON("https://api.thingspeak.com/channels/"+did+"/feeds.json?api_key="+apikey+"&results=300", function(json1) {
console.log(json1);
var data = [];
json1.feeds.forEach(function(feed,i){
    console.log("\n The details of " + i + "th Object are :  \nCreated_at: " + feed.created_at + "\nEntry_id:" + feed.entry_id + "\nField1:" + feed.field1 + "\nField2:" + feed.field2+"\nField3:" + feed.field3);      
    my_json = feed;
    console.log(my_json); //Object {created_at: "2017-03-14T01:00:32Z", entry_id: 33358, field1: "4", field2: "4", field3: "0"}
    data.push(my_json);
     //["2017-03-14T01:00:32Z", 33358, "4", "4", "0"]
}); 
console.log(data);
0

can you try something like this. You have to put each json in the data not json[i], because in the way you are doing it you are getting and putting only the properties of each json. Put the whole json instead in the data

 var my_json;
    $.getJSON("https://api.thingspeak.com/channels/"+did+"/feeds.json?api_key="+apikey+"&results=300", function(json1) {
    console.log(json1);
        var data = [];
    json1.feeds.forEach(function(feed,i){
        console.log("\n The details of " + i + "th Object are :  \nCreated_at: " + feed.created_at + "\nEntry_id:" + feed.entry_id + "\nField1:" + feed.field1 + "\nField2:" + feed.field2+"\nField3:" + feed.field3);      
        my_json = feed;
        console.log(my_json); //Object {created_at: "2017-03-14T01:00:32Z", entry_id: 33358, field1: "4", field2: "4", field3: "0"}
        data.push(my_json);
    }); 

Not the answer you're looking for? Browse other questions tagged or ask your own question.