从json对象解析一个特定的记录

parse a particular record from json object

本文关键字:一个 记录 对象 json      更新时间:2023-09-26

我有以下json对象

       var testObj = {
        "CompanyA": [
            { "geography": [ "Europe", "Germany" ], "productLine": "Produce", "revenue": { "2022": 130143, "2021": 172122, "2020": 103716 } },
            { "geography": [ "Europe", "France" ], "productLine": "Clothing", "revenue": { "2022": 85693, "2021": 91790, "2020": 77650 } },
            { "geography": [ "Europe", "France" ], "productLine": "Electronics", "revenue": { "2022": 121987, "2021": 62435, "2020": 65834 } },
            { "geography": [ "Europe", "Germany" ], "productLine": "Produce", "revenue": { "2022": 130143, "2021": 107447, "2020": 145543 } },
            { "geography": [ "Europe", "Germany" ], "productLine": "Clothing", "revenue": { "2022": 77903, "2021": 97139, "2020": 110346 } },
            { "geography": [ "Europe", "Germany" ], "productLine": "Electronics", "revenue": { "2022": 110897, "2021": 155282, "2020": 128696 } },
            { "geography": [ "South America", "Brazil" ], "productLine": "Clothing", "revenue": { "2022": 66217, "2021": 55798, "2020": 66643 } },
            { "geography": [ "South America", "Brazil" ], "productLine": "Electronics", "revenue": { "2022": 94262, "2021": 100560, "2020": 56272 } }
          ],
          "CompanyB": [
            { "geography": [ "Europe", "United Kingdom" ], "productLine": "Produce", "revenue": { "2022": 281110, "2021": 242965, "2020": 221863 } },
            { "geography": [ "Europe", "United Kingdom" ], "productLine": "Clothing", "revenue": { "2022": 168270, "2021": 121161, "2020": 60919 } },
            { "geography": [ "Europe", "United Kingdom" ], "productLine": "Electronics", "revenue": { "2022": 239537, "2021": 131959, "2020": 97047 } },
            { "geography": [ "Europe", "Ireland" ], "productLine": "Produce", "revenue": { "2022": 74963, "2021": 43406, "2020": 54623 } },
            { "geography": [ "Europe", "Ireland" ], "productLine": "Clothing", "revenue": { "2022": 44872, "2021": 24797, "2020": 16010 } },
            { "geography": [ "Europe", "Ireland" ], "productLine": "Electronics", "revenue": { "2022": 63877, "2021": 94185, "2020": 87098 } }
          ],
         .........
       };

在我的页面中有三个下拉菜单:Company, Geography(CountryName2nd元素)and ProductLine…

根据选择的下拉值,我需要选择收入…

我能够捕获用户选择的公司名称地理(countryName)productLine,但难以获得特定的收入…

我可以得到这样的收入

console.log(testObj[company][1].revenue);

但是这里我不确定具体的记录,因为我需要根据国家和产品线进行选择

我得到了这个问题的解决方案。但我想知道什么是解析json对象的最佳方式…

您可以像这样筛选匹配对象

var company = "CompanyA";
var country = "Germany";
var productLine = "Produce";
var res = testObj[company].filter(function(el){
  return el.geography[1] == country && productLine == el.productLine;
});
console.log(res);

你只需要循环遍历数组,直到找到匹配的数组:

var companyArr = testObj[company];
for(var i = 0; i < companyArr.length; i++){
    if(companyArr[i].geography[1] == country && companyArr[i].productLine == productLine)
        break;
}
if(i < companyArr.length){ // Found a match
    console.log(companyArr[i]); // Log the matching object
}

注意,如果重构json是一个选项,那么你可以完全避免循环,只需要这样做:

testObj[company][country][productLine].revenue