2017-05-12 8 views
0

私は特定の停止から次のバスを表示するWebアプリケーションを構築しています。jsonのオブジェクトの長さを取得

それはTransportAPIを使用し、そこから私は、JSONファイルを取得:https://transportapi.com/v3/uk/bus/stop/450023470/live.json?app_id=221cce2f&app_key=d209929236fc97196775650c2bdb639e&group=route&limit=2&nextbuses=yes

JSONが配列であると私は困難を抱えているが、以下の作品29

{ 
    "atcocode": "450023470", 
    "smscode": "45023470", 
    "request_time": "2017-05-11T11:57:51Z", 
    "name": "Headingley Campus", 
    "stop_name": "Headingley Campus", 
    "bearing": "N", 
    "indicator": "", 
    "locality": "Beckett Park, Leeds", 
    "departures": { 
    "29": [ 
     { 
     "mode": "bus", 
     "line": "29", 
     "line_name": "29", 
     "direction": "Student Village", 
     "operator": "FL", 
     "date": "2017-05-11", 
     "expected_departure_date": "2017-05-11", 
     "aimed_departure_time": "13:05", 
     "expected_departure_time": "13:05", 
     "best_departure_estimate": "13:05", 
     "source": "NextBuses", 
     "dir": "inbound", 
     "id": "https:\/\/transportapi.com\/v3\/uk\/bus\/route\/FL\/29\/inbound\/450023470\/2017-05-11\/13:05\/timetable.json?app_id=221cce2f&app_key=d209929236fc97196775650c2bdb639e", 
     "operator_name": "First Leeds" 
     } 

の内部データにアクセスしますしかし、私は値[29]が何であるか常に分かりません。

alert(obj['departures'][29].length); 

値を知らずに長さを取得するにはどうすればよいですか?

$.ajax({ 
    type:"GET", 
    dataType: 'JSONP', 
    jsonpCallback: 'callback', 
    url: "https://transportapi.com/v3/uk/bus/stop/450023470/live.json?app_id=221cce2f&app_key=d209929236fc97196775650c2bdb639e&group=route&limit=2&nextbuses=yes", 
    success: function(data) { 
     var obj = jQuery.parseJSON(JSON.stringify(data)); 

alert(obj['departures'][29].length); 

      //$("body").append(JSON.stringify(data['departures'][29][0]['line_name'])); 
      //alert(obj.departures.length); 
     }, 
    error: function(jqXHR, textStatus, errorThrown) { 
      alert(jqXHR.status); 
     }, 

}); 
+0

ただ、命名の事。そのアラートを持つオブジェクトの長さを取得していません。あなたは配列の長さを取得しています。また、 'data'がすでにオブジェクトであるときに' jQuery.parseJSON(JSON.stringify(data)) 'を実行している理由がわかりません... –

答えて

0

Object.keys(obj.departures)obj.departuresのキーを返します。あなたのコンテキストに基づいて、あなたの例では「29」という1つのキーしかないと仮定します。

だから、単にObject.keys(obj.departures)で「29」を置き換えます

obj.departures[Object.keys(obj.departures)].length 

は、あなたが投稿したコードは、通常のオブジェクトではなく、JSONを示していることに注意してください。 JSONはオブジェクトの文字列表現です。

スニペット:

var obj = { 
 
    //... 
 
    "departures": { 
 
    "randomkey": [ 
 
     { 
 
     "mode": "bus", 
 
    //...   
 
     }, 
 
     { 
 
     "mode": "automobile", 
 
    //...   
 
     }, 
 
     { 
 
     "mode": "train" 
 
    //...   
 
     } 
 
    ] 
 
    } 
 
} 
 
console.log(obj.departures[Object.keys(obj.departures)].length); //3

+0

正当に質問に対処する2つの回答が投票された。それが何か励ましの場合、それは働くので、私はあなたにupvoteを与えた。 – Terry

+0

ありがとう、@テリー。ダウンボートの正当な理由があったかもしれませんが、説明が与えられていなければ、あなた(または私)には何の助けにもなりません。 –

+0

こんにちは@RickHitchcock、ありがとう。この例では29と29xの2つのキーがあるので、オブジェクトのスニペットを追加する必要があります。あなたの例を使って、どうすればバス29xを得ることができますか?ありがとう – noddenslehctim

0

以下

完全なコードは、ちょうどオブジェクトのプロパティを反復:

var obj = JSON.parse(data); // Using native browser JSON parsing instead 

if (obj.hasOwnProperty('departures')) { // Should validate just to be sure 
    for (var i in obj['departures']) { 
     console.log(i, obj['departures'][i], obj['departures'][i].length); // Or anything 
    } 
} 
0

あなたは、実際のキーの名前に興味を持っていませんが、ちょうどあなたがdepartures変換することができ、配列として返されたバスラインを取得したい場合は - オブジェクトを配列に配列します。

var depArr=Object.values(dataObj.departures); 

var n=depArr.lengthは、提供されている異なるバスライン数を表示し、depArr[i].lengthは、各バスライン(i = 0...(n-1))に与えられた回数を表示します。

0

お試しObject.keys()Array.map()ES6アローの割り当て。

var jsonObj = { 
 
"atcocode": "450023470", 
 
"smscode": "45023470", 
 
"request_time": "2017-05-13T18:42:12+01:00", 
 
"bearing": "N", 
 
"indicator": "", 
 
"name": "Headingley Campus", 
 
"locality": "Beckett Park, Leeds", 
 
"stop_name": "Headingley Campus", 
 
"departures": { 
 
"29": [ 
 
     { 
 
     "mode": "bus", 
 
     "line": "29", 
 
     "line_name": "29", 
 
     "direction": "Student Village", 
 
     "operator": "FL", 
 
     "date": "2017-05-11", 
 
     "expected_departure_date": "2017-05-11", 
 
     "aimed_departure_time": "13:05", 
 
     "expected_departure_time": "13:05", 
 
     "best_departure_estimate": "13:05", 
 
     "source": "NextBuses", 
 
     "dir": "inbound", 
 
     "id": "https:\/\/transportapi.com\/v3\/uk\/bus\/route\/FL\/29\/inbound\/450023470\/2017-05-11\/13:05\/timetable.json?app_id=221cce2f&app_key=d209929236fc97196775650c2bdb639e", 
 
     "operator_name": "First Leeds" 
 
     }] 
 
} 
 
}; 
 

 
var res = Object.keys(jsonObj.departures).map(item => {return jsonObj.departures[item].length}); 
 

 
console.log(res);

関連する問題