当前位置: 首页 > 知识库问答 >
问题:

如何让Jackson将JSONObject转换为有效负载中的字符串?

章松
2023-03-14
{
   "name": "John Smith",
   "status": true,
   "requestMessage": "{\"id\": \"some-id\", \"timestamp\": \"2019-11-30\"}"
}

为了满足这个字段,我在POJO类中创建了一个属性RequestMessage,并将该类型设置为JSONObject,这是org.json包中的一个类型。我认为这是有意义的,因为如果我需要在代码中使用它,我可以很容易地以JSONObject的形式访问信息。我的POJO课上有这样的内容:

public class Message {
    private String name;
    private boolean status;
    private JSONObject requestMessage;

    @JsonCreator
    public Message(
            @JsonProperty("name") String name,
            @JsonProperty("status") boolean status,
            @JsonProperty("requestMessage") JSONObject requestMessage
    ) {
        this.name = name;
        this.status = status;
        this.requestMessage = requestMessage;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public JSONObject getRequestMessage() {
        return requestMessage;
    }

    public void setRequestMessage(JSONObject requestMessage) {
        this.requestMessage = requestMessage;
    }

    @Override
    public String toString() {
        return "Message{" +
                "name='" + name + '\'' +
                ", status=" + status +
                ", requestMessage=" + requestMessage +
                '}';
    }
}

然而,杰克逊在发送消息时似乎无法正确地将其转换为字符串。RequestMessage字段始终转换为字符串,作为有效负载中的空{}对象。

如何让Jackson在发送有效负载时将messagePOJO类中的requestmessage属性正确转换为字符串并映射为字符串?

共有1个答案

易俊驰
2023-03-14

您需要告诉Jackson使用其ToString方法序列化JSONObject字段,如下所示:

public static class Message {
    private String name;
    private boolean status;
    @JsonSerialize(using=ToStringSerializer.class)
    private JSONObject requestMessage;
    // ...
}

反序列化之所以有效,是因为Jackson默认使用接受字符串参数的构造函数进行反序列化。JSONObject有一个,所以它被反序列化了。为了保持一致性,我本来希望在序列化中使用tostring,但实际上没有。我想这背后一定有很好的设计原因。

话虽如此,但我不明白,如果您已经在使用Jackson了,为什么还要尝试使用jsonObject中的jsonObject。我将坚持使用JSONObject在Jackson中的等价物,我猜它是JSONNode,Coderino Javarino建议的。

 类似资料:
  • 我正在使用将Json从Web获取到字符串中。 这可能很简单,但我似乎无法将此字符串转换为。 我该怎么做?

  • 日安, 我在Adapter IBM Mobilefirst平台中创建了一个java类,它将从Jax-ws服务获得响应。 2.这段代码将获得XML字符串形式的响应,但我不知道如何使用库com.ibm.json.*。我想将字符串响应转换为JSONObject。 2.1.XML Soap信封中的结果响应(我得到的成功结果示例)。 2.2.responseSoap字符串变量我需要将字符串XML Soap响

  • 问题内容: 请建议如何将使用库转换为使用库。 我未成功执行的操作: 问题答案: 您无需使用。您应该使用Gson在JSON字符串和您自己的Java对象之间进行转换。 请参阅《Gson用户指南》: (序列化) (反序列化)

  • 我想将字节转换为JsonObject。我试着这样: 但我遇到编译器错误: 我怎么能这样呢?

  • 问题内容: 我正在使用A 将Json从Web转换为字符串。 这可能很简单,但是我似乎无法将此字符串转换为。 我怎样才能做到这一点? 问题答案: 请参阅文档和示例。

  • 问题内容: 基本上我有: 现在,我想将其转换为包含相同信息的。这样我就可以绕过对象,然后在需要时可以从对象中获取所有信息。任何帮助,将不胜感激,谢谢。 问题答案: 通常,Json对象将包含您的值(包括数组)作为其中的命名字段。因此,类似: 在JSON中将是{“ arrayName”:[…]}。