在groovy中按项值排序json字符串
我有以下代码块:在groovy中按项值排序json字符串,json,sorting,groovy,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"
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....
def response='[{“id”:“121”,“startTime”:“2013-11-10T20:48:54Z”,“reqId”:123456,“endTime”:null,“numFiles”:null},
{“id”:“123”,“开始时间”:“2013-11-29T21:45:00Z”,“请求id”:123458,“结束时间”:“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
…这里还有其他东西。。。。
我正在尝试按reqId(rqId)降序排序。我必须使用for循环吗?当前sortedResponse正在引发异常:
groovy.lang.MissingMethodException:没有方法签名:java.lang.String.sort()适用于参数类型:(…Controller$\u closure2\u closure8)值:[…Controller$\u closure2_closure8@5976ac5b]
我也尝试过排序(新的OrderBy(…),但也不起作用
任何帮助都将不胜感激。问题似乎是您试图对响应字符串进行排序,而不是对JSONObject的集合进行排序 试试这个
def reqRespJSON = new JsonSlurper().parseText( response )
def sortedJSON = reqRespJSON.sort { a,b -> b.reqId <=> a.reqId}
def id = sortedJSON[0].id
def reqRespJSON=new JsonSlurper().parseText(响应)
def sortedJSON=reqRespJSON.sort{a,b->b.reqId a.reqId}
def id=sortedJSON[0]。id
请注意,sortedJSON是一个映射列表,因此您必须指定id来自哪个映射(使用[0])。它是一个映射列表,而不是JSONObject数组;-)非常感谢。这把它修好了。请更新您的回复,如@tim_yates所示