2016-07-06 12 views
1

オブジェクトを反復処理しようとしています。ブラウザにJSONビューは次のようになります。オブジェクトを反復処理する方法は?

["<li id='0'>[object Object]</li>", "<li id='1'>[object Object]</li>",] 

は実際に私が望んでいた:私は、コンソールのメッセージを参照してください開発ツールで

$(document).ready(function(){ 
    $.getJSON("http://api.geonames.org/postalCodeLookupJSON?postalcode=6600&country=AT&username=demo", function(data) { 
     $.each(data, function(key, val){ 
      items.push("<li id='" + key + "'>" + val + "</li>"); 
     }); 
    }); 

{ 
    postalcodes: [{ 
     adminCode2: "708", 
     adminCode3: "70805", 
     adminName3: "Breitenwang", 
     adminCode1: "07", 
     adminName2: "Politischer Bezirk Reutte", 
     lng: 10.7333333, 
     countryCode: "AT", 
     postalcode: "6600", 
     adminName1: "Tirol", 
     placeName: "Breitenwang", 
     lat: 47.4833333 
    }, { 
     adminCode2: "708", 
     adminCode3: "70806", 
     adminName3: "Ehenbichl", 
     adminCode1: "07", 
     adminName2: "Politischer Bezirk Reutte", 
     lng: 10.7, 
     countryCode: "AT", 
     postalcode: "6600", 
     adminName1: "Tirol", 
     placeName: "Ehenbichl", 
     lat: 47.4666667 
    }, ] 
} 

は、今まで私はforEachのメソッドを使用しましたすべてのキー値をネストされたリスト要素として持つこと。これを取得するためにjQueryコードを修正するにはどうすればよいですか?

はあなたに

編集した答えをありがとう:これは私が今になって何です:

<script> 
$(document).ready(function(){ 
    $.getJSON("http://api.geonames.org/postalCodeLookupJSON?postalcode=6600&country=AT&username=demo", function(data) { 
    var items = []; 
    $.each(data, function (key, value) { 
     $('body').append($('<div></div>').html(key + ' (' + value.length + ' results)')); 
     var list = $('<ul></ul>'); 
     $('body').append(list); 
    }); 
    $.each(data.postalcodes, function(key, val){ 
     for (var k in val) { 
     if (val.hasOwnProperty(k)) { 
      items.push("<li id='" + k + "'>" + val[k] + "</li>"); 
      } 
     } 
     $("<ul/>", { 
     "class": "my-new-list", 
     html: items.join("") 
     }).appendTo("body"); 
    }); 

    }); 
}); 
</script> 
+2

注意何を持っていることは、オブジェクトではなく、JSONであること。 –

+0

私はforループを使用しますか? – ytsejam

+0

'postalcodes'配列から得ようとしている値は何ですか? –

答えて

2
value

postalcodesプロパティを含むオブジェクトです。これに続いて、ループ内のvalは、プロパティを含むオブジェクトである。あなたはこのような何かをしたい:

$.each(value.postalcodes,function(key,val) { 
    //val is now an object with properties adminCode2, adminCode3, etc 
    //e.g. items.push("<li id='"+key+"'>"+val.postalcode+"</li>"); 
}); 
+0

Adamは仕事をしましたが、クリスフの答えとミックスしなければならなかった、私は近くですが、htmlに追加することはできません。編集したコードをチェックできますか?私は体内に置いてはいけません。 – ytsejam

+0

okは私が欲しいものを解決しました。 – ytsejam

1

は、試験されたが、このような気にいらないことがありますか?

for (var prop in value) { 
for (var prop2 in value[prop]) { 
    items.push("<li id='" + prop2 + "'>" + value[prop][prop2] + "</li>"); 
} 
} 
+0

外側ループの配列に 'for..in'ループを使用しないのが最善です。 [この質問](http://stackoverflow.com/questions/500504/whyis-using-for-in-with-array-iteration-a-bad-idea)を参照してください。通常のforループが最も安全です。 – 4castle

2

あなたは右postalcodes配列、通過したいですか?それは配列なのでオブジェクトではないからです。

はい、あなたはあなたのケースで

postalcodes.map(function(postal) { 
    // now the "postal" is the object which contains the single props 
}); 

map機能で簡単にループすることができれば - あなたはこのjQueryのようなものでとどまれば - 、APIからの応答を使用しpostalcodes配列を取得し、それらをマッピングします。 ..結果を返すとitems VARに保存

$(document).ready(function(){ 
    $.getJSON("http://api...", function(data) { 
     var items = data.postalcodes.map(function(postal, id) { 
      return '<li id="' + id + '">' + postal.adminName2 + '</li>'; 
     }) 
    }); 
}); 

そして、あなたはECMAScriptの6

を使用している場合3210
$(document).ready(() =>{ 
    $.getJSON("http://api...", (data) => { 
     var items = data.postalcodes.map((postal, id) => '<li id="' + id + '">' + postal.adminName2 + '</li>'); 
    }); 
}); 

私は...

EDIT

ちょうどFYI、ES6にあなたが道短いそれを書くことができます助けることができると思います:)

$(document).ready(() =>{ 
    $.getJSON("http://api...", ({postalcodes:zips}) => { 
     const items = zips.map(({adminName2:name}, id) => `<li id="${id}">${name}</li>`); 
    }); 
}); 
+0

これはまた面白いアプローチです、私はそれについて勉強します。 – ytsejam

0

APIではありません現在入手可能ですが、以前に保存したデータがあります。

var data = {'postalcodes':[{'adminCode2':'708','adminCode3':'70805','adminName3':'Breitenwang','adminCode1':'07' 
    ,'adminName2':'Politischer Bezirk Reutte','lng':'10.7333333','countryCode':'AT','postalcode':'6600', 
    'adminName1':'Tirol','placeName':'Breitenwang','lat':'47.4833333'},{'adminCode2':'708','adminCode3':'70806', 
    'adminName3':'Ehenbichl','adminCode1':'07','adminName2':'Politischer Bezirk Reutte','lng':'10.7', 
    'countryCode':'AT','postalcode':'6610', 'adminName1':'Tirol', 'placeName':'Ehenbichl','lat': '47.4666667'}]}; 

あなたはpostalcodesを反復処理し、各オブジェクトに対して郵便番号の値を取得する必要がまず第一。

var items = []; 
$.each(data.postalcodes, function() { 
    items.push("<li id='postalcode'>" + this.postalcode + "</li>"); 
}); 
console.log(items); 

出力は次のとおりです。

["<li id='postalcode'>6600</li>", "<li id='postalcode'>6610</li>"] 
関連する問題