java - 使用 Jackson 将对象转换为 JSON 字符串

标签 java json jackson

我正在开发一个与服务器通信的应用程序,分别将数据发送到网站,从该网站接收数据。 数据大约有5个可选的时间表。

例如如果设置了 3 个时间表,并且我想取消选择其中之一,则应该仅向网站发送 2 个时间表。这里有一个问题。

我分析了我的代码,得出的结论是问题出在将对象转换为 JSON 字符串的方法中。

这是代码:

public class PriorityResponse {

    @JsonProperty("priority1")
    public Priority priorityOne;
    @JsonProperty("priority2")
    public Priority priorityTwo;
    @JsonProperty("priority3")
    public Priority priorityThree;
    @JsonProperty("priority4")
    public Priority priorityFour;
    @JsonProperty("priority5")
    public Priority priorityFive;

    public Priority getPriorityOne() {
        return priorityOne;
    }

    public Priority getPriorityTwo() {
        return priorityTwo;
    }

    public Priority getPriorityThree() {
        return priorityThree;
    }

    public Priority getPriorityFour() {
        return priorityFour;
    }

    public Priority getPriorityFive() {
        return priorityFive;
    }
   public String toJsonObject(){

         String jsonInString = "";
         ObjectMapper mapper = new ObjectMapper();
       //Object to JSON in String
         try {
             jsonInString = mapper.writeValueAsString(this);
         } catch (JsonProcessingException e) {
             e.printStackTrace();
         }

         return jsonInString;
     }
}

在这一行

jsonInString = mapper.writeValueAsString(this);

字符串为空,但返回jsonInString时,发送的是3个时间表,而不是2个。 如果我进行其他更改,它会发送正确的数据,则只有当我想取消选择一个或多个时间表时才会出现问题。

当我取消选择 Priority4 时,输出应该是这样的:

{"priority5":{"number":null,"timeOut":null,"timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":true,"sun":true,"thu":true,"tue":true,"wed":true}},"priority4":{"number":null,"timeOut":null,"timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":true,"sun":true,"thu":true,"tue":true,"wed":true}},"priority1":{"number":"1234561231","timeOut":"9","timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":false,"sun":false,"thu":true,"tue":true,"wed":true}},"priority3":{"number":"21515211545","timeOut":"","timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":true,"op":false},"fri":false,"mon":true,"sat":false,"sun":false,"thu":true,"tue":true,"wed":false}},"priority2":{"number":"789123156421","timeOut":"","timeTable":{"time":{"fh":"04","fm":"02","th":"13","tm":"07","cl":false,"op":false},"fri":true,"mon":true,"sat":true,"sun":true,"thu":true,"tue":true,"wed":true}}}

但是,当我取消选择一个优先级时,JSON 字符串似乎不会刷新,因为发送的优先级与我最初获得的优先级相同。 以下是发送的内容:

{"priority5":{"number":null,"timeOut":null,"timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":true,"sun":true,"thu":true,"tue":true,"wed":true}},"priority4":{"number":"12233456545","timeOut":"6","timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":false,"sun":false,"thu":true,"tue":true,"wed":true}},"priority1":{"number":"1234561231","timeOut":"9","timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":false,"sun":false,"thu":true,"tue":true,"wed":true}},"priority3":{"number":"21515211545","timeOut":"5","timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":true,"op":false},"fri":false,"mon":true,"sat":false,"sun":false,"thu":true,"tue":true,"wed":false}},"priority2":{"number":"789123156421","timeOut":"5","timeTable":{"time":{"fh":"04","fm":"02","th":"13","tm":"07","cl":false,"op":false},"fri":true,"mon":true,"sat":true,"sun":true,"thu":true,"tue":true,"wed":true}}}

最佳答案

尝试使用 com.google.gson.Gson 如果任何属性为 null,则解析器为

String jsonInString = new Gson().toJson(yourObject);

结果:

{
 "priorityOne":{},
 "priorityTwo":{},
  ...
}

关于java - 使用 Jackson 将对象转换为 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38357102/

相关文章:

javascript - Google 自定义搜索热门查询出现错误

json - 从 postgreSQL 中的表查询 json 对象

java - JsonParseException,JSON 中不存在错误字符

java - 为什么我的 @Scheduled Spring Boot 任务在 Azure 中运行不一致?

Java - 数组输出 null

java - 解析 "+"整数时无效 int

java - 自定义标签 - 访问模型中的数据?

php - 拉维尔 | Eloquent 地填充外国数据

java - 将 Json 转换为 DTO 数组

java - 将存储为对象的字符串属性的 json 作为 JSON 对象发送到客户端