【问题标题】:Extracting specific data from JSON array in groovy从groovy中的JSON数组中提取特定数据
【发布时间】:2019-10-07 18:11:51
【问题描述】:

我正在尝试使用 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 循环。有没有更有效的方法来提取数据而无需迭代?

【问题讨论】:

标签: java json loops groovy simplify


【解决方案1】:

看看 JsonSlurper

类似这样的:

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

【讨论】:

    【解决方案2】:

    无论实现如何,最终都会涉及一些迭代。不过,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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 2020-10-02
      • 2015-02-18
      • 2015-04-15
      • 1970-01-01
      相关资源
      最近更新 更多