2014-07-10 115 views
0

我試圖尋找以下Yodlee公司JSON數據傳送專線例如,如果關鍵詞是「傢俱」,那麼只顯示「plainTextDescription」,這等於「傢俱交易」使用關鍵字,返回只匹配

不太清楚搜索JSON結果集如何通過使用JQuery嵌套的JSON結果集的grep ...

/// RAW Yodlee公司JSON的ResultSet

http://pastebin.com/6498mZJf

提前感謝!

+0

爲什麼不將它轉換爲Javascript對象並使用.indexOf()進行搜索? –

+0

@ m.casey你能提供一個簡單的代碼示例嗎? – Dango

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

我打破了位成多個功能更容易閱讀,但一個可以重新因素它被更簡潔。

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;