2015-03-13 112 views
0

我想找到最好的方式如何根據其值過濾JSON。我有一個JSON文件,我需要根據使用的過濾器只返回數據的子集。Java彈簧過濾JSON

{"employees":[ 
     {"firstName":"John", "lastName":"Doe"}, 
     {"firstName":"Anna", "lastName":"Smith"}, 
     {"firstName":"Peter", "lastName":"Jones"}, 
     {"firstName":"Jake", "lastName":"Smith"} 
    ]} 

比方說,我只想返回姓氏是史密斯的人。因爲我在控制器中獲取參數值,所以沒有簡單的方法來傳遞它到dao層並在那裏改變getter。

當然,我可以通過使用對象進行數組來完成此操作,並且只保存那些符合條件的人,但對於那些效率非常低的大數據。我敢打賭,這樣做有更好的方法。

@JSONview和過濾器似乎沒有幫助我的問題,他們可以隱藏和顯示所有的字段,我想用值而不是字段來做到這一點。有沒有這樣做的簡單方法,或者我需要手動過濾它?

謝謝。

+0

數組中的四個對象並不大。你的情況有多大?向我們展示您嘗試處理數據的代碼。 – 2015-03-13 09:39:15

+0

我的情況有超過百萬個對象。結構相似。 – 2015-03-13 10:00:21

+1

帶有M +對象的一個​​JSON文件? – 2015-03-13 10:04:24

回答

0

你提到DAO層,所以我猜數據來自數據庫。

最有效的過濾可以通過數據庫e.q.提供的工具完成。如果是SQL,則可以執行SELECT ... FROM ... WHERE ...而不是執行SELECT ... FROM ...並手動對其進行過濾。

如果您無法在數據庫級別過濾數據,則無法在代碼中對其進行過濾。這並不一定要慢 - 先執行此操作,然後檢查是否會導致問題。避免過早優化。

過濾操作相對簡單,可以大量並行化。它也沒有使用大量的內存,因爲過濾後的副本只包含對已經存在的對象的引用,並且只要處理該元素,就不再需要它,並且可以進行垃圾回收。

我快速查看了org.json:json:20141113JSONArray,不幸的是沒有訪問數組本身來使用它的Java 8流。有必要將他們的源文件複製到您的項目中並稍微修改它。

+0

嗨,謝謝。不幸的是我不能過濾比我已經做的更多。我需要從數據庫分開加載到返回JSON。我嘗試做你提到的過濾,謝謝。 – 2015-03-13 11:23:33