2017-02-07 16 views
0

urlを使用してjsonデータを取得しようとしています。現在、Jsonデータを解析してURLからフィードデータのみを取得する必要があります。下記のコードとjson data.Canを追加しています誰も私にどのように私は次のjson出力からフィードデータを解析することができます助けてください.thankyou。Javascript JSON https urlを使用した構文解析

JSON DATA:

{ 
    "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" 
    }] 
} 

$.ajax({ 
    url: " https://api.thingspeak.com/channels/9/feeds.json?results=2", 
    dataType: "json", 
    cache: false, 
    error: function(xhr, ajaxOptions, thrownError) { 
    debugger; 
    alert(xhr.statusText); 
    alert(thrownError); 
    }, 
    success: function(json1) { 
    console.log(json1); 
    if (json1.length == 0) { 
     window.alert("The returned output array length is ZERO."); 
    } else { 
     var obj1, Feed; 
     for (var x = 0; x < json1.length; x++) { 
     obj1 = json1[x]; 
     console.log(obj1); 
     if (obj1 == null || obj1 == "") { 
      window.alert("\n The " + (x + 1) + "th object is NULL/BLANK."); 
     } else { 

      if (obj1.feeds == null || obj1.feeds.length == 0) { 
      window.alert("\n The name portion of " + (x + 1) + "th object is NULL/BLANK."); 
      } else { 
      Feed = obj1.feeds; 

      for (var k = 0; k < Feed.length; k++) { 
       console.log("\n The deails of " + (x + 1) + "th Object are : \nCreated_at: " + Feed[k].created_at + "\nEntry_id:" + Feed[k].entry_id + "\nField1:" + Feed[k].field1 + "\nField2:" + Feed[k].field2); 
      } 
      } 
     } 
     } 
    } 
    } 
}); 
+0

まず第一に、この長さは、その中にタイプミスがあります: '(obj1.feeds == nullの|| obj1.feeds.lenght == 0){場合' –

+0

を参照してください。このLink.youはいくつかのアイデアを得るでしょう。 http://stackoverflow.com/questions/29936971/find-a-value-inside-array-of-json-object –

+0

あなたは私にそのタイプミスを教えてもらえますか?それを打つことができません@ Marc-AntoineParent – Anusha

答えて

1

単に個々のフィードのフィード配列を解析:

json1.feeds.forEach(function(feed){ 
    console.log("th Object are : \nCreated_at: " + feed.created_at 
    + "\nEntry_id:" + feed.entry_id + "\nField1:" + feed.field1 + "\nField2:" + feed.field2);  
}); 

https://plnkr.co/edit/WSgdO6dZsyIAQVxWkTzr?p=preview

+0

tq.Itは私の問題を解決した@inQstvJs – Anusha

0
ここでの問題は、あなたが動作するようにしようとしていることである

strと(json1.length)、を指定したため、フードの下にjqueryがJSONオブジェクトを返します。
したがって、文字列ではなくオブジェクトで作業する必要があります。そして、あなたの例では、プロパティfeedsを持つ単純なオブジェクトを持っているので、ちょうどjson1.feedsにある横断配列が必要です。

ここに私の例(私はちょうどsuccess callbackを更新しました):

json1.feeds.forEach(function(feed, i) { 
    // This is your code, I've just copy-paster it here. 
    console.log("\n The deails of " + i + "th Object are : \nCreated_at: " + feed.created_at + "\nEntry_id:" + feed.entry_id + "\nField1:" + feed.field1 + "\nField2:" + feed.field2); 
}); 
+0

tq.Itは私の問題を解決@ Vladimir KovPak – Anusha

2

json1それは、オブジェクトの配列ではありません。フィードの配列を取得するには、オブジェクトの.feedsプロパティにアクセスする必要があります。

$.ajax({ 
    url: " https://api.thingspeak.com/channels/9/feeds.json?results=2", 
    dataType: "json", 
    cache: false, 
    error: function(xhr, ajaxOptions, thrownError) { 
    debugger; 
    alert(xhr.statusText); 
    alert(thrownError); 
    }, 
    success: function(json) { 
    console.log(json); 
    if (!json || json.feeds === undefined || json.feeds.length === 0) { 
     window.alert("The returned output array length is ZERO."); 
    } else { 
     json.feeds.forEach(function (feed, index) { 
     var indexPlusOne = index + 1; 
     console.log("The deails of " + indexPlusOne + "th Object are : \nCreated_at: " + feed.created_at + "\nEntry_id:" + feed.entry_id + "\nField1:" + feed.field1 + "\nField2:" + feed.field2); 
     }); 
    } 
    } 
}); 

あなたがES2015やテンプレートの文字列を使用する場合は、それが少し読みやすくできます:このような何か

$.ajax({ 
    url: " https://api.thingspeak.com/channels/9/feeds.json?results=2", 
    dataType: "json", 
    cache: false, 
    error: (xhr, ajaxOptions, thrownError) => { 
    debugger; 
    alert(xhr.statusText); 
    alert(thrownError); 
    }, 
    success: (json) => { 
    console.log(json); 
    if (!json || json.feeds === undefined || json.feeds.length === 0) { 
     window.alert("The returned output array length is ZERO."); 
    } else { 
     json.feeds.forEach(function (feed, index) { 
     var indexPlusOne = index + 1; 
     console.log(` 
The deails of ${indexPlusOne}th Object are: 
Created_at: ${feed.created_at} 
Entry_id: ${feed.entry_id} 
Field1: ${feed.field1} 
Field2: ${feed.field2}`); 
     }); 
    } 
    } 
}); 

あなたは本当に私もちょうどそれを単純化cacheオプションを使用する必要がない限り、 jQuery.getJSONの代わりjQuery.ajaxを使用します。

$.getJSON("https://api.thingspeak.com/channels/9/feeds.json?results=2") 
    .fail((req, status, err) => { 
    console.error(`AJAX call failed: ${err}`); 
    }) 
    .done((data) => { 
    console.log(data); 
    if (!data || data.feeds === undefined || data.feeds.length === 0) { 
     window.alert("The returned output array length is ZERO."); 
    } else { 
     data.feeds.forEach(function (feed, index) { 
     var indexPlusOne = index + 1; 
     console.log(` 
The deails of ${indexPlusOne}th Object are: 
Created_at: ${feed.created_at} 
Entry_id: ${feed.entry_id} 
Field1: ${feed.field1} 
Field2: ${feed.field2}`); 
     }); 
    } 
    }); 
+0

tq.it解決済み@無駄なコードを発行する – Anusha

0

次のように上記の問題の答えがあります。

$.ajax({ 
    url: " https://api.thingspeak.com/channels/9/feeds.json?results=2", 
    dataType: "json", 
    cache: false, 
    error: function(xhr, ajaxOptions, thrownError) { 
    debugger; 
    alert(xhr.statusText); 
    alert(thrownError); 
    }, 
    success: function(json1) { 
    console.log(json1); 
    json1.feeds.forEach(function(feed, i) { 
    console.log("\n The deails of " + i + "th Object are : \nCreated_at: " + feed.created_at + "\nEntry_id:" + feed.entry_id + "\nField1:" + feed.field1 + "\nField2:" + feed.field2); 
}); 
関連する問題