如何在JSON对象中搜索一个对象数组以获取字符串并返回包含它的对象?

时间:2015-09-15 22:28:25

标签: javascript jquery json

问题

搜索我在this SO answer中找到的JSOn对象的方法很有效,但是,我需要它来返回包含匹配对象,值或对的“对象”而不是匹配的对象本身。

守则

function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));
        } else if (i == key && obj[key] == val) {
            objects.push(obj);
        }
    }
    return objects;
}
getObjects(obj, key, val);

问题

如何增加它以返回包含匹配对象/值/对的对象而不仅仅是匹配本身? (jQuery或JS)

JSON示例

例如,我需要检查键Event(或Event[#text])的值“已发送,前门/门廊”是否存在,如果存在,我需要找到{{1在找到EventDate的对象中。

Event

1 个答案:

答案 0 :(得分:0)

最后使用以下功能:

function ContainsKeyValue(obj, key, value) {
    if (obj[key] === value) return true;
    for (all in obj) {
        if (obj[all] != null && obj[all][key] === value) {
            return true;
        }
        if (typeof obj[all] == "object" && obj[all] != null) {
            var found = ContainsKeyValue(obj[all], key, value);
            if (found == true) return true;
        }
    }
    return false;
}
for (var eventType in historyDates) {
    for (var i = 0; i < trackingDetails.length; i++) {
        var detail = trackingDetails[i];
        if (ContainsKeyValue(detail, "#text", eventType)) {
            historyDates[eventType] = detail.EventDate["#text"];
        }
    }
}