【问题标题】:How to avoid backslash while using Gson().toJson使用 Gson().toJson 时如何避免反斜杠
【发布时间】:2021-05-04 16:36:04
【问题描述】:

所以我有一个像 Org.java 这样的休息模型,其中我有一个 String 类型的字段。

public class Org {
   private String employee;
   ...
}

public class Employee {
    private final String id;
     private final type;
     ....
}

在返回 API 响应时,我需要针对 employe 字段返回员工对象列表。所以在我的后端我得到了一个employee Object 的列表。

List <Employee> employeeList = getEmployeesList(..);

注意:employeeList 永远不会为空。

然后我尝试将 employeeList 转换为 JSON 到 String,然后使用以下方法在 API 模型中设置。

方法一:

String employees= new Gson().toJson(employeeList);
org.setEmployee(employees);

方法二:

String employees= (new Gson().toJson(employeeList)).replaceAll("\\","");
org.setEmployee(employees);

问题是在每个双引号之前添加了一个反斜杠。我不希望 \ 在 id 、 type 及其值前面。

谁能帮我解决这个问题。

目前我得到了什么

{
"employee": [{\"id\":\"156543\",\"type\":\"employee\"}]
}

我想要的在下面

{
"employee": [{"id":"156543","type":"employee"}]
}

【问题讨论】:

    标签: java json string rest gson


    【解决方案1】:

    出现此问题是因为您进行了两次序列化。第一步产生一些双引号,第二步想将双引号序列化为\" 字符。

    在这种情况下,我建议您制作最终对象并序列化它。例如,您应该进行如下更改:

    class Org {
       private List<Employee> employee = new ArrayList<>();
    
       public void add(Employee employee) {
           this.employee.add(employee);
       }
    }
    
    class Employee {
       private String id;
       private String type;
    
       Employee(String id, String type) {
          this.id = id;
          this.type = type;
       }
    }
    
    Org org = new Org();
    org.add(new Employee("156543", "employee"));
    
    String result = new Gson().toJson(org);
    

    结果应该如下:

    {"employee":[{"id":"156543","type":"employee"}]}
    

    【讨论】:

    • 感谢@Hossein 的回复。将尝试您建议的方法。
    • 我发布了解决方案的简单输出。
    • 无法将员工的数据类型从字符串更改为列表。因此,在我的上述方法中,试图将员工列表转换为字符串,最后在 Org 模型实例中进行设置。但是两次序列化的好处。会尝试看看我是否可以通过某种方式来解决这个问题。
    【解决方案2】:

    与我之前遵循的方法无关。但是我通过将 employee 的数据类型从 String 转换为 Object 解决了我的上述问题。通过这种方式,它在请求期间接受字符串,在响应期间接受对象列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 2011-09-06
      • 1970-01-01
      • 2014-09-09
      相关资源
      最近更新 更多