[英]JSON.parse returning [Object object] Looking to access properties of object
[英]Looking for object properties in JSON file
我正在使用为我提供JSON文件的结果api。 这样,我需要遍历文件并查找特定的属性。 因此,我将JSON推送到一个空数组中,对其进行循环,然后获取第一个对象。 效果很好。 令我有些困扰的是数组内部,JSON文件中的所有对象都存储在一个大对象中。 所以自然而然地,我想我必须遍历那个对象才能进入它的内部,但是当我尝试时,我什么也得不到。 我是否需要一个额外的循环? 我将尽我所能。 另外,我在上下搜索了一个解决方案,如果这是重复的,我深表歉意。 如果是这样的话,我对简单的阅读链接感到非常满意。 谢谢你的帮助。
JSON:
{
"0":{
"person_id":"001583133371",
"source":"lexis",
"phone_number":"",
"first_name":"Brian",
"middle_name":"JOSEPH",
"last_name":"Name",
"aliases":[
{
"first_name":"B",
"middle_name":"",
"last_name":"Name"
},
{
"first_name":"Brianj",
"middle_name":"",
"last_name":"Name"
},
{
"first_name":"Brian",
"middle_name":"J",
"last_name":"Name"
},
{
"first_name":"Brian",
"middle_name":"J",
"last_name":"Name"
}
],
"street":"",
"city":"Newbury Park",
"state":"CA",
"zip":"91320",
"priorAddresses":[
{
"street":"",
"city":"Sacramento",
"state":"CA"
},
{
"street":"",
"city":"Las Cruces",
"state":"NM"
},
{
"street":"",
"city":"Big Bear Lake",
"state":"CA"
},
{
"street":"",
"city":"Camarillo",
"state":"CA"
}
],
"age":56,
"dob":"1958\/11\/01",
"yob":"1958",
"relatives":[
{
"first_name":"SHARON",
"middle_name":"J",
"last_name":"Name",
"person_id":"001583349299"
},
{
"first_name":"COREY",
"middle_name":"D",
"last_name":"Name",
"person_id":"036454253754"
},
{
"first_name":"KATHLEEN",
"middle_name":"",
"last_name":"Name",
"person_id":"003096670145"
},
{
"first_name":"KELSEY",
"middle_name":"MAYER",
"last_name":"Name",
"person_id":"080603146279"
}
],
"middle_initial":"J.",
"gender":"m",
"f_phone_number":"N\/A",
"f_relatives":"Sharon Name
Corey Name
Kathleen Name
Kelsey Name",
"a_relatives":"Sharon Name,Corey Name,Kathleen Name,Kelsey Name",
"f_priorAddresses":"Sacramento, CA;Las Cruces, NM;Big Bear Lake, CA;Camarillo, CA",
"street_name":"",
"street_number":"",
"report":"fENBfE5ld2J1cnkgUGFya3xNY21haG9ufEJyaWFufDAwMTU4MzEzMzM3MXw1NnwxOTU4LzExLzAxfHw5MTMyMHxTaGFyb24gTWMgTWFob24sQ29yZXkgTWNtYWhvbixLYXRobGVlbiBNY21haG9uLEtlbHNleSBNY21haG9ufFNhY3JhbWVudG8sIENBO0xhcyBDcnVjZXMsIE5NO0JpZyBCZWFyIExha2UsIENBO0NhbWFyaWxsbywgQ0E="
},
"1":{
"person_id":"001683750301",
"source":"lexis",
"phone_number":"",
"first_name":"Brian",
"middle_name":"DANIEL",
"last_name":"Name",
"aliases":[
{
"first_name":"B",
"middle_name":"",
"last_name":"Name"
},
{
"first_name":"Brian",
"middle_name":"Daniel",
"last_name":"Name"
},
{
"first_name":"Brian",
"middle_name":"Daniel",
"last_name":"Name"
},
{
"first_name":"Brian",
"middle_name":"",
"last_name":"Name"
}
],
"street":"",
"city":"Huntington Beach",
"state":"CA",
"zip":"92648",
"priorAddresses":[
{
"street":"",
"city":"Huntington Beach",
"state":"CA"
},
{
"street":"",
"city":"Santa Ana",
"state":"CA"
},
{
"street":"",
"city":"Costa Mesa",
"state":"CA"
},
{
"street":"",
"city":"Long Beach",
"state":"CA"
}
],
"age":40,
"dob":"1974\/03\/24",
"yob":"1974",
"relatives":[
{
"first_name":"ELAINE",
"middle_name":"D",
"last_name":"Name",
"person_id":"001684063727"
},
{
"first_name":"THOMAS",
"middle_name":"W",
"last_name":"Name",
"person_id":"001684361956"
}
],
"middle_initial":"D.",
"gender":"m",
"f_phone_number":"N\/A",
"f_relatives":"Elaine Name
Thomas Name",
"a_relatives":"Elaine Name,Thomas Name",
"f_priorAddresses":"Huntington Beach, CA;Santa Ana, CA;Costa Mesa, CA;Long Beach, CA",
"street_name":"",
"street_number":"",
"report":"fENBfEh1bnRpbmd0b24gQmVhY2h8TWNtYWhvbnxCcmlhbnwwMDE2ODM3NTAzMDF8NDB8MTk3NC8wMy8yNHx8OTI2NDh8RWxhaW5lIE1jbWFob24sVGhvbWFzIE1jbWFob258SHVudGluZ3RvbiBCZWFjaCwgQ0E7U2FudGEgQW5hLCBDQTtDb3N0YSBNZXNhLCBDQTtMb25nIEJlYWNoLCBDQQ=="
}
}
JS:
var whereAt = [];
$.getJSON('/search/resultsJSON/CA/this/guy', function(json) {
whereAt.push(json);
console.log(whereAt);
for (var i = 0; i < whereAt.length; i++) {
console.log(whereAt[0][i].zip);
var test = whereAt[0][i].zip;
MQA.withModule('geocoder', function() {
map.geocodeAndAddLocations(test);
});
} // end for loop
});
我正在尝试获取whereAt数组中每个对象的zip属性,请不要介意MQA的东西。 上面的代码有效,但仅用于获取数组中第一个对象的zip属性。 我正在尝试找到一种方法来全部抓住它们并进行控制台。将它们记录到控制台中。 我可以得到的任何帮助都将受到极大的赞赏,如果我能提供其他任何帮助,我将非常乐意提供我所能提供的一切。 感谢你的宝贵时间。
我想你的意思是:
var test = whereAt[0][i]["zip"];
JSON仍然是一个数组; 它仅具有用于检索数据的自定义HR“键”。
是的,您确实需要为基本上是数组的所有内容循环。
例如,假设您在示例中提供的JSON对象称为jsonFile
,并且您想要jsonFile["0"]["aliases"]
数组中的所有对象,那么您将使用条件for
循环像(var i = 0; i < jsonFile["0"]["aliases"].length; i++)
。
但是,如果您打算更多地使用JSON文档,数组和对象,我强烈建议您检查lodash
类的库或名为underscore
的替代库。
他们都有很多示例,而最初花费很少的时间来检查示例并弄清楚所需的示例,将为您节省很多意外的结果,并且通常可以节省时间:)
它们具有对上述数据类型执行相当复杂的过滤/搜索/迭代操作的功能。
JSON已经是“对象”,无需将其推入数组。 您拥有的JSON结构更像是字典,而不是数组,其中“ 0”和“ 1”是键。
尝试这个:
var whereAt = json;
for (var prop in whereAt) {
if(whereAt.hasOwnProperty(prop)){
console.log(whereAt[prop].zip);
}
}
另外,请确保删除“ f_relatives”属性中的那些换行符。 由于它们,您发布的JSON无效。
如果您的目标是通过对象的键来递归查看某个属性,则可能应该使用如下递归函数:
function findZipCodes(obj) {
if (typeof obj != 'object')
return;
if (typeof obj['zip'] != 'undefined')
zipCodes.push(obj['zip']);
for (prop in obj) {
findZipCodes(obj[prop]);
}
}
然后,获取JSON的代码如下所示:
$(document).ready(function(){
var zipCodes = [];
$.get('index.json', function(data){
findZipCodes(data);
function findZipCodes(obj) {
if (typeof obj != 'object')
return;
if (typeof obj['zip'] != 'undefined')
zipCodes.push(obj['zip']);
for (prop in obj) {
findZipCodes(obj[prop]);
}
}
console.log(zipCodes);
});
});
您的错误是由于使用基于索引的循环(“ for(var i = 0; i <...”))引起的,这不适用于具有您期望的属性的对象。有许多解决方案,但是减轻您对像数组这样的对象进行迭代的困惑,我建议使用以下代码:
$.getJSON('/search/resultsJSON/CA/this/guy', function(json) {
keys = json.keys()
for (var i = 0; i < keys.length; i++) {
console.log(json[keys[i]].zip);
var test = json[keys[i]].zip;
MQA.withModule('geocoder', function() {
map.geocodeAndAddLocations(test);
});
} // end for loop
});
另请参阅Object.keys()和For..in以供参考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.