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

rkh*_*rkh 2 sorting groovy json

我有以下代码块:

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....
Run Code Online (Sandbox Code Playgroud)

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

groovy.lang.MissingMethodException: No signature of method: java.lang.String.sort() is applicable for argument types: (...Controller$_closure2_closure8) values: [....Controller$_closure2_closure8@5976ac5b]

我也试过 sort (new OrderBy(...)) 但这也不起作用......

任何帮助,将不胜感激。

bil*_*dev 6

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

尝试这个?

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


def id = sortedJSON[0].id
Run Code Online (Sandbox Code Playgroud)

请注意,sortedJSON 是一个地图列表,因此您必须指定您想要的 id(使用 [0])。