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

时间:2014-07-10 16:57:24

标签: javascript jquery json search yodlee

我正在尝试搜索下面的Yodlee JSON数据源,例如,如果关键字是"家具"然后只显示" plainTextDescription"这相当于"家具交易"

不太确定如何使用JQuery来嵌套JSON结果集...

/// RAW YODLEE JSON RESULTSET

http://pastebin.com/6498mZJf

提前致谢!

2 个答案:

答案 0 :(得分:1)

这里是Fiddle

简短版本是:

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>');
    }
})();

我将这些位分解为多个函数以便于阅读,但可以将其重新分解为更简洁。

答案 1 :(得分:0)

您可以通过JQuery轻松完成此任务。

this question的已接受答案中,已经编写了一个简单的方法来为您完成此操作。它对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;