Javascript 使用关键字搜索JSON结果集并仅返回匹配项

Javascript 使用关键字搜索JSON结果集并仅返回匹配项,javascript,jquery,json,search,yodlee,Javascript,Jquery,Json,Search,Yodlee,我试图搜索下面的Yodlee JSON数据源,例如,如果关键字是“furniture”,那么只显示“plainTextDescription”,它等于“furniture transactions” 不太确定如何使用JQuery通过嵌套的JSON结果集进行grep ///原始YODLEE JSON结果集 提前谢谢 通过JQuery可以很容易地完成这一点 在已被接受的答案中,已经编写了一个简单的方法来为您执行此操作。它对JSON对象进行深度搜索,然后将所有匹配的对象输出到一个数组中。获取此数组的

我试图搜索下面的Yodlee JSON数据源,例如,如果关键字是“furniture”,那么只显示“plainTextDescription”,它等于“furniture transactions”

不太确定如何使用JQuery通过嵌套的JSON结果集进行grep

///原始YODLEE JSON结果集


提前谢谢

通过JQuery可以很容易地完成这一点

在已被接受的答案中,已经编写了一个简单的方法来为您执行此操作。它对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;
    }
    //put in the desired object name for ObjectName
    //if the object is a string just use JSON.parse(ObjectName) to convert it to a javascript object
    getObjects(ObjectName, "furnitire", "Furniture Transactions").length;
这是我的建议

简短版本如下:

var data = JSON.stringify({ "Body": [{...my obscenely long JSON}] });
var parsedData = JSON.parse(data);
var transactions = [];

// processes account objects
function processAccount(account) {
    if (account.cardTransactions) {
        for (var i = 0; i < account.cardTransactions.length; i++) {
            var transaction = account.cardTransactions[i];
            if (transaction) {
                if (transaction.categorizationKeyword.toLowerCase() === 'shell oil') {
                    transactions.push(transaction);
                }
            }
        }
    }
}

// processes the itemData objects
function processItemData(itemData) {
    for (var i = 0; i < itemData.accounts.length; i++) {
        processAccount(itemData.accounts[i]);
    }
}

(function() {
    // iterates through elements in the body
    for (var i = 0; i < parsedData.Body.length; i++) {
        processItemData(parsedData.Body[i].itemData);
    }

    for (var j = 0; j < transactions.length; j++) {
        $('#container').append('<p>' + transactions[j].plainTextDescription + '</p>');
    }
})();
var data=JSON.stringify({“Body”:[{……我那讨厌的长JSON}]});
var parsedData=JSON.parse(数据);
var交易=[];
//处理帐户对象
函数processAccount(account){
if(账户卡交易){
对于(变量i=0;i');
}
})();

为了便于阅读,我将这些位分解为多个函数,但可以将其重新分解为不太详细的部分。

为什么不将其转换为Javascript对象,并使用.indexOf()?@m.casey搜索它?您能提供一个简单的代码示例吗?我在下面添加了一个答案。