Как избавиться от косых черт в JSON с помощью Groovy

#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»);