首页 > 解决方案 > 如何使用 Groovy 去除 JSON 中的斜线

问题描述

我需要查询一个表,然后以 JSON 格式返回 SQL 返回的所有行——

这是代码 -

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" : "[{\"Line ID\":\"0\",\"Alpha Name\":\"Alpha Name 1\",\"Mailing Name\":\"Mailing Name1\",\ "Type Code\":\"\"},{\"Line ID\":\"1\",\"Alpha Name\":\"Alpha Name 2\",\"Mailing Name\":\" Mailing Name2\",\"Type Code\":\"E\"},{\"Line ID\":\"2\",\"Alpha Name\":\"Alpha Name 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"
   }
]

标签: jsongroovy

解决方案


JsonOutput.toJson(m)如果您使用方法两次将映射对象序列化为 JSON,您会得到用斜杠转义的双引号。在以下行中:

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))

推荐阅读