Изменение меток, которые jsonBuilder создает автоматически в Groovy после преобразования Obj в JSON
У меня есть класс с именем Case, который похож на:
class Case {
String caseId;
Map <String, List<String[]>> listOfCases = new HashMap<String, ArrayList<String[]>>();
}
Я создал несколько таких случаев и добавил их в список. В конце концов я хочу напечатать список в формате JSON в Groovy, как:
for (...){
// creating many of these cases in a loop and adding to caseList
caseList.add(myCase);
}
// Finally printing them
println new JsonBuilder( caseList ).toPrettyString()
Результат выглядит так, я выбрал только одно:
{
"caseId": "Case_1",
"listOfCases": {
"server-config.xml": [
[
"Core",
"8"
]
],
"server-beans.xml": [
[
"plugin",
"mmap"
],
[
"maxIdle",
"16"
],
[
"minIdle",
"16"
],
[
"maxCon",
"16"
]
]
}
}
Я хочу, чтобы listOfCases был заменен на Case_1, поэтому каждый раз, когда я создаю новый Case с увеличенным числом, следует имя. Есть ли способ настроить jsonBuilder в Groovy для этого?
1 ответ
Решение
Как указано в разделе Как изменить JSON в Groovy, изменив content
опасно, так как пытается изменить исходный объект. Решение, представленное там, состоит в том, чтобы послать правильную карту.
Вы можете подготовить карту из ваших данных и передать это так:
class Case {
String caseId
Map<String,List<List<String>>> listOfCases
}
def caseList = (1..3).collect{
new Case(caseId: "Case$it", listOfCases: [ 'abcde': [['1','2'],['4','5']]])
}
println new groovy.json.JsonBuilder(caseList.collect{[caseId: it.caseId, "$it.caseId": it.listOfCases]}).toPrettyString()
результаты в
[
{
"caseId": "Case1",
"Case1": {
"abcde": [
...