簡體   English   中英

從 groovy 中的 JSON 數組中提取特定數據

[英]Extracting specific data from JSON array in groovy

我正在嘗試使用 groovy 從 JSON 數組中提取特定數據。 這是數組的一個示例:

{
"elements": [
    {
        "State": "AK",
        "DayOfWeek": "Mon",
        "StartTime": "0900",
        "EndTime": "2200"
    },
    {
        "State": "AK",
        "DayOfWeek": "Tue",
        "StartTime": "0900",
        "EndTime": "2200"
    },
    {
        "State": "AK",
        "DayOfWeek": "Wed",
        "StartTime": "0900",
        "EndTime": "2200"
    }]}

在這種情況下,我想在 DayOfWeek 是 Tue 時從 AK 中提取 StartTime。 到目前為止,我想出的唯一方法是使用 for 循環。 有沒有更有效的方法來提取數據而無需迭代?

看看 JsonSlurper

像這樣的東西:

def json = new JsonSurper().parseText(".....")
json.elements.each(element -> {
        // logic to extract what you want
    });

無論實現如何,最終都會涉及一些迭代。 不過,Groovy 可以幫助我們更有表現力地編寫它。 這里的迭代是由find完成的:

List elements = new groovy.json.JsonSlurper().parseText('''{
"elements": [
    {
        "State": "AK",
        "DayOfWeek": "Mon",
        "StartTime": "0900",
        "EndTime": "2200"
    },
    {
        "State": "AK",
        "DayOfWeek": "Tue",
        "StartTime": "0900",
        "EndTime": "2200"
    },
    {
        "State": "AK",
        "DayOfWeek": "Wed",
        "StartTime": "0900",
        "EndTime": "2200"
    }]}''')."elements"

return elements.find { it."State" == "AK" && it."DayOfWeek" == "Tue" }."StartTime"

由於您將其標記為“簡化”,大概當您要求更高效的東西時,您真正的意思是您想要編寫更少的代碼,所以上面的適合。

如果查找性能是問題,因為您想要進行多次搜索,您可以使用 Map 來索引元素(一次),然后獲取數據就變成了查找而不是搜索的問題:

Map elementsByStateAndDay = elements.groupBy { [it."State", it."DayOfWeek"] }
return elementsByStateAndDay.get(["AK", "Tue"]).head()."StartTime"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM