json - 在 groovy 中按项目值对 json 字符串进行排序

标签 json sorting groovy

我有以下代码块:

def response =  '[{"id": "121","startTime": "2013-11-10T20:48:54Z", "reqId": 123456, "endTime": null, "numFiles"     :null}, 
{"id": "123","startTime": "2013-11-29T21:45:00Z","reqId": 123458,"endTime": "2013-11-30T21:45:00Z", "numFiles"     :null }, 
{"id": "121","startTime": "2013-11-8T20:48:54Z", "reqId": 123111, "endTime": null, "numFiles" :null}]'

 def sortedResponse = response.sort { a,b -> b.reqId <=> a.reqId}

def reqRespAPI = new JsonSlurper().parseText(sortedResponse )

def id = reqRespAPI.id
def stTime = reqRespAPI.startTime
def eTime = reqRespAPI.endTime
def rqId = reqRespAPI.reqId
def numRec = reqRespAPI.numFiles

...some other stuff here....

我正在尝试按 reqId (rqId) 降序排序。我必须使用 for 循环吗?当前的 sortedResponse 抛出异常:

groovy.lang.MissingMethodException:没有方法签名:java.lang.String.sort() 适用于参数类型:(...Controller$_closure2_closure8) 值:[....Controller$_closure2_closure8 @5976ac5b]

我也试过 sort (new OrderBy(...)) 但这也没有用...

如有任何帮助,我们将不胜感激。

最佳答案

问题似乎是您正在尝试对响应 String 进行排序,而不是对 JSONObjects 的集合进行排序。

试试这个?

def reqRespJSON = new JsonSlurper().parseText( response )
def sortedJSON = reqRespJSON.sort { a,b -> b.reqId <=> a.reqId}


def id = sortedJSON[0].id

请注意,sortedJSON 是一个 map 列表,因此您必须指定要从哪个 map 获取 ID(使用 [0])。

关于json - 在 groovy 中按项目值对 json 字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290272/

相关文章:

javascript - sort() 在 mozilla 和 opera 中无法正常工作

algorithm - 合并排序与基数排序 : Merge sort taking O(n (log n)^2) time in special cases?

Android AlertDialog Builder 更好的代码

objective-c - 从 JSON 数组 objective-c 获取值时出现问题

php - php json_encode函数中未显示度数 '°'字符,如何显示?

javascript - 使用递归对 JSON 进行多级排序和解析

list - Groovy 组合列表列表的方法

json - 使用 sed 提取 json 值

algorithm - K-way归并排序在多台主机上划分

grails - 在集成测试中执行Grails筛选器