Java 在groovy中从JSON数组提取特定数据

Java 在groovy中从JSON数组提取特定数据,java,json,loops,groovy,simplify,Java,Json,Loops,Groovy,Simplify,我试图使用groovy从JSON数组中提取特定数据。这是阵列的一个示例: { "elements": [ { "State": "AK", "DayOfWeek": "Mon", "StartTime": "0900", "EndTime": "2200" }, { "State": "AK", "DayOfWeek": "Tue", "StartTime":

我试图使用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"
    }]}

在本例中,我希望在星期二从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"
既然您将其标记为“simplify”,那么当您要求更高效的东西时,您真正的意思是希望编写更少的代码,所以上面的内容很适合

如果由于要执行多次搜索而导致查找性能问题,则可以使用映射对元素进行索引(一次),然后获取数据就变成了执行查找而不是搜索的问题:

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

显示您尝试的内容。从一些解析
JSON
的教程开始,例如,