解析后对Groovy展平的JsonSluper对象进行排序

时间:2018-10-19 05:17:29

标签: java json groovy

我有一条JSON消息,在使用JsonSluper对其进行解析后,顺序变得混乱了。我知道排序并不重要,但是在将消息解析并分解为单个对象后,我需要将消息放回升序,因此我可以构建一个JsonArray并以正确的升序显示消息。

String test = """[
{
"AF": "test1",
"BE": "test2",
"CD": "test3",
"DC": "test4",
"EB": "test5",
"FA": "test5"
},
{
"AF": "test1",
"BE": "test2",
"CD": "test3",
"DC": "test4",
"EB": "test5",
"FA": "test5"
}
]"""

parseText生成以下内容:

def json = new groovy.json.JsonSlurper().parseText(test);

[{CD=test3, BE=test2, AF=test1, FA=test5, EB=test5, DC=test4}, {CD=test3,
 BE=test2, AF=test1, FA=test5, EB=test5, DC=test4}]

解析json消息后,我需要将扁平化的json对象传递到一个方法中,在该方法中,需要先使用map键按升序对点进行排序,然后再添加到以下JSONArray中。

def json = new groovy.json.JsonSlurper().parseText(test);
for( int c = 0; c < json?.size(); c++ )
    doSomething(json[c]);

void doSomething( Object json ){
    def jSort= json.????
    JSONArray jsonArray = new JSONArray();
    jsonArray.add(jSort);
}

1 个答案:

答案 0 :(得分:1)

您可以在添加条目之前对条目进行排序。以下使用collectEntries,它创建LinkedHashMap对象(因此保持顺序):

def json = new groovy.json.JsonSlurper().parseText(test);

def sortedJson = json.collect{map -> map.entrySet().sort{it.key}
                     .collectEntries{[it.key, it.value]}}

sortedJson具有此内容,该内容似乎按要求进行了排序:

 [[AF:test1, BE:test2, CD:test3, DC:test4, EB:test5, FA:test5], 
  [AF:test1, BE:test2, CD:test3, DC:test4, EB:test5, FA:test5]]