Поиск в наборе результатов JSON по ключевым словам и возврат только совпадений

0

Я пытаюсь выполнить поиск ниже данных Yodlee JSON, например, если ключевым словом является "мебель", тогда отображается только "plainTextDescription", что равно "мебельным сделкам",

Не совсем уверен, как grep через вложенные YSON-результаты с использованием JQuery...

///RAW YODLEE JSON RESULTSET

http://pastebin.com/6498mZJf

Заранее спасибо!

  • 0
    Почему бы не преобразовать его в объект Javascript и выполнить поиск с помощью .indexOf ()?
  • 0
    @ m.casey Можете ли вы предоставить простой пример кода?
Показать ещё 1 комментарий
Теги:
search
yodlee

2 ответа

1
Лучший ответ

Вот скрипка.

Краткая версия такова:

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

Я разбил биты на несколько функций, чтобы упростить чтение, но можно было бы повторно использовать его, чтобы быть менее подробным.

0

Вы можете сделать это через 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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню