#json #groovy
#json #groovy
Вопрос:
Мне нужно запросить таблицу, а затем возвращает все строки, возвращаемые SQL в формате JSON—
Вот код —
HashMap < String,Object > returnMap = new HashMap < String,Object > ();
Execute SQL....
def ArraySize = SQL.size();
def WhosWhoFinal = [];
for (int a = 0; a <= ArraySize - 1; a ) {
def WhosWho = [:];
WhosWho.put("Line ID", SQL[a]."LineID".toString().trim());
WhosWho.put("Alpha Name", SQL[a]."AlphaName".toString().trim());
WhosWho.put("Mailing Name", SQL[a]."MailingName".toString().trim());
WhosWho.put("Type Code", SQL[a]."TypeCode".toString().trim());
WhosWhoFinal << WhosWho;}
returnMap.put("WhosWho", JsonOutput.toJson(WhosWhoFinal));
return returnMap;
Результат, который я получаю, имеет косые черты и не имеет отступов—
«WhosWho»: «[{«Идентификатор строки»:»0″,» Альфа-имя «: «Альфа-имя 1 «,»Почтовое имя «: «Почтовое имя 1 «,»Код типа «: «»},{«Идентификатор строки»:»1″,» Альфа-имя»: «Альфа-имя 2», «Почтовое имя»: «Почтовое имя 2», «Код типа»: «E»},{«Идентификатор строки»:»2″,» Альфа-имя»: «Альфа-имя 3», «Почтовое имя»: «Почтовое имя 3», «Код типа»: «O»}]»
Вот что я хотел бы получить —
"WhosWho":[
{
"Line ID":0,
"Alpha Name":"Alpha Name1",
"Mailing Name":"Mailing Name1",
"Type Code":""
},
{
"Line ID":1,
"Alpha Name":"Alpha Name2",
"Mailing Name":"Mailing Name2",
"Type Code":"E"
},
{
"Line ID":2,
"Alpha Name":"Alpha Name3",
"Mailing Name":"Mailing Name3",
"Type Code":"O"
}
]
Комментарии:
1. когда вы говорите о
output
— что вы имеете в виду? пожалуйста, поделитесь кодом, который вы используете для вывода вашегоreturnMap
Ответ №1:
Вы получите двойные кавычки, заключенные в косые черты, если вы дважды сериализуете объект map в JSON с JsonOutput.toJson(m)
помощью метода. В следующей строке:
returnMap.put("WhosWho", JsonOutput.toJson(WhosWhoFinal));
вы помещаете сериализованную строку JSON под WhosWho
ключом. Что вы (скорее всего) делаете дальше (это отсутствует в вашем примере кода), вы вызываете что-то вроде:
JsonOutput.toJson(returnMap)
который принимает строку, хранящуюся в WhosWho
ключе, и сериализует ее в строку JSON, и, таким образом, вы получаете все экранированные двойные кавычки.
Вы можете избежать этого, не сериализуя WhosWhoFinal
строку JSON в первую очередь:
returnMap.put("WhosWho", WhosWhoFinal);
Во-вторых, если вы хотите красиво распечатать свой вывод JSON, вы можете вызвать JsonOutput.prettyPrint(s)
метод с s
сериализованной строкой JSON.
JsonOutput.prettyPrint(JsonOutput.toJson(returnMap))
Ответ №2:
Спасибо Шимону Степняку.
Я добавил это, и это сработало. def jsonIn = new JsonSlurper().parseText(ввод); (ввод — это возвращаемая карта сверху)
def WhosWhoList = [:]; WhosWhoList = new JsonSlurper().parseText(jsonIn.»WhosWho»);