繁体   English   中英

迭代嵌套的JSON

[英]Iterate nested JSON

我有像这样的嵌套对象

{
    "root": {
        "company": [{
                "id": "Google",
                "contact": [{
                        "field": "name",
                        "value": "Larry Page"
                    }, {
                        "field": "flag",
                        "value": ""
                    }, {
                        "field": "initial",
                        "value": "LP"
                    }
                ]
            }, {
                "id": "Snap",
                "contact": [{
                        "field": "name",
                        "value": "Evan Spiegel"
                    }, {
                        "field": "flag",
                        "value": "true"
                    }, {
                        "field": "initial",
                        "value": "ES"
                    }
                ]
            }, {
                "id": "Airbnb",
                "contact": [{
                        "field": "name",
                        "value": "Brian Chesky"
                    }, {
                        "field": "flag",
                        "value": ""
                    }, {
                        "field": "initial",
                        "value": "BC"
                    }
                ]
            }
        ]
    }
}

我需要根据标志值创建2个单独的列表-一个用于flag = "" ,另一个用于flag = true

预期结果是以下两个列表:

var flagisTrue = {ES}
var flagisEmpty = [{"name":"Larry Page", "initial": "LP"}, {"name":"Brian Chesky", "initial": "BC"}]

其中flagisTrue仅包含缩写,而flagisEmpty包含名称和缩写。

如何在JavaScript中使用此结构?

试试这个。 希望它会有所帮助。

var object = {
    "root" : {
        "company" : [{
                "id" : "Google",
                "contact" : [{
                        "field" : "name",
                        "value" : "Larry Page"
                    }, {
                        "field" : "flag",
                        "value" : ""
                    }, {
                        "field" : "initial",
                        "value" : "LP"
                    }
                ]
            }, {
                "id" : "Snap",
                "contact" : [{
                        "field" : "name",
                        "value" : "Evan Spiegel"
                    }, {
                        "field" : "flag",
                        "value" : "true"
                    }, {
                        "field" : "initial",
                        "value" : "ES"
                    }
                ]
            }, {
                "id" : "Airbnb",
                "contact" : [{
                        "field" : "name",
                        "value" : "Brian Chesky"
                    }, {
                        "field" : "flag",
                        "value" : ""
                    }, {
                        "field" : "initial",
                        "value" : "BC"
                    }
                ]
            }
        ]
    }
}

var flagisTrue = [], flagisEmpty = [];
for (var i = 0; i < object.root.company.length; i++) {
    var contact = object.root.company[i].contact;
    var result = {};
    for (var j = 0; j < contact.length; j++)
        result[contact[j].field] = contact[j].value;

    if (result["flag"])
        flagisTrue.push({
            name : result["name"],
            initial : result["initial"]
        });
    else
        flagisEmpty.push({
            name : result["name"],
            initial : result["initial"]
        });
}

console.log(flagisEmpty);
console.log(flagisTrue);
var flagIsTrue = jsonObj.root.company.filter(function(c){
  return c.contact.filter(function(_contact){
    return (_contact.field == "flag" && _contact.value == "true");
  }).length > 0;
}).map(function(c){
  return c.contact.filter(function(_contact){
    return _contact.field == "initial";
  }).map(function(_contact){
    return _contact.value
  }).join("");
});

var flagIsEmpty = jsonObj.root.company.filter(function(c){
  return c.contact.filter(function(_contact){
    return (_contact.field == "flag" && !_contact.value);
  }).length > 0;
}).map(function(c){
  var obj = {};
  for(var i = 0, len = c.contact.length ; i < len ; i++) {
    if(c.contact[i].field != "flag")
      obj[c.contact[i].field] = c.contact[i].value;
  }
  return obj;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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