Сортировать Groovy сплющенный объект JsonSluper после анализа - PullRequest
0 голосов
/ 19 октября 2018

У меня есть сообщение JSON о том, что после разбора его с JsonSluper порядок нарушен.Я знаю, что порядок не важен, но мне нужно вернуть сообщение в порядке возрастания после того, как сообщение будет проанализировано и сведено в отдельные объекты, чтобы я мог собрать JsonArray и представить сообщение в правильном порядке asc.

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 в метод, в котором точку нужно отсортировать в порядке возрастанияключи карты перед добавлением в 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 голосов
/ 19 октября 2018

Вы можете просто отсортировать записи перед их добавлением.Далее используется 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]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...