繁体   English   中英

在JSON文件中查找对象属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM