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

我只能将java中的值序列化为json吗。util。可选择的

越伟泽
2023-03-14

我面临以下问题:我有一个类,它的数据成员是java。util。可选对象,我需要将其转换为json。代码的一般方式如下所示:

public class MyClass{

  public java.util.Optional<MyCustomObject> object;

  public Myclass(java.util.Optional<MyCustomObject> object){
    this.object = object;
  }

  public java.util.Optional<MyCustomObject> getObject(){
    return this.object;
  }

  public void setObject(java.util.Optional<MyCustomObject> object){
    return this.object = object;
  }
}

当我将其转换为json时,会得到如下结果:

Optional[
                object
            ]

我想去掉json中的可选部分。我可以这样做吗?

共有1个答案

公孙联
2023-03-14

有多个Java库可用于序列化/反序列化。其中之一是出色的Jackson库,您可以在其中以细粒度的方式调整序列化。

如果您拥有POJOMyClass的源代码,您只需添加一些注释即可使其正常工作。

如果您假设MyCustomObject如下所示:

public class MyCustomObject {
    private final String myVal;

    public MyCustomObject(String myVal) {
        this.myVal = myVal;
    }

    public String getMyVal() {
        return myVal;
    }
}

然后,您的MyClass对象可以这样声明(注意注释@JsonIgnore@JsonProperty):

public class MyClass {
    private Optional<MyCustomObject> object;

    public MyClass(Optional<MyCustomObject> object) {
        this.object = object;
    }

    // Ignore the "normal" serialization
    @JsonIgnore
    public Optional<MyCustomObject> getObject() {
        return this.object;
    }

    public void setObject(Optional<MyCustomObject> object) {
        this.object = object;
    }

    // This handles the serialization
    @JsonProperty("object")
    private MyCustomObject getObjectAndYesThisIsAPrivateMethod() {
        return getObject().orElse(null);
    }
}

最后,您可以使用以下代码序列化为JSON:

ObjectMapper mapper = new ObjectMapper();
final String json = mapper.writeValueAsString(
        new MyClass(Optional.ofNullable(new MyCustomObject("Yes, my value!"))));

上述代码的魔力在于使用ObjectMapper来处理数据绑定,即POJO和JSON之间的转换(反之亦然)。

另一种方法是,如果您不拥有MyClass的源代码,即您不能修改它,那么您可以按照Jackson文档中的描述创建自定义序列化程序。

 类似资料:
  • 问题内容: 使用Jackson 2,我正在寻找一种 通用的 方式将对象序列化为单个值(然后序列化它们,然后再填充该单个字段),而不必重复创建JsonSerializer / JsonDeserializer来处理每种情况。@JsonIdentityInfo批注非常接近,但由于我知道,它将始终对完整的子对象进行序列化,因此略微遗漏了该标记。 这是我想做的一个例子。给定的类: 我希望Order可以序列

  • 问题内容: 我需要将一些以形式表示的数据转换为。我想使用此 Java实现来执行此操作,但我不明白该怎么办。 我看了几本教程,并在Internet上阅读了一些有关内容的文章,但不了解最简单的东西:如何转换为? 例如,我在JSON中有以下代码: 我现在应该怎么办?像什么? 问题答案: 在您的数据中添加一个“ @context”条目。 您的JSON-LD处理器将完成其余工作(从0.9版开始) 作为测试,

  • 我试图从python向json文件发送一个简单的字典,但我一直收到“TypeError:1425不是json可序列化的”消息。 如果我添加默认参数,那么它会写入,但整数值会作为字符串写入json文件,这是不可取的。

  • 问题内容: 我有以下用于序列化查询集的代码; 以下是我的 我需要序列化。但是它说无法序列化。因为列表由Django对象和字典组成。有任何想法吗 ? 问题答案: 并且不能很好地与Django对象配合使用。 Django的内置序列化器只能序列化由django对象填充的查询集: 在您的情况下,其中包含django对象和dict的混合。 一种选择是摆脱中的模型实例,并使用dict将其替换为: 希望有帮助。

  • 我在VS Studio中编写了一个C#Web API,并创建了许多DTO,这些DTO被序列化为任何客户端都可以使用的JSON实体。我的一个API调用是返回一个PDF文件,所以经过一些在线研究,我设置了其中一个DTO是以以下格式设置的。我在某处读到你可以做到这一点,但不是百分之百确定: 当将对象作为IHttpActionResult返回时,我不会得到任何错误: 我可以在服务器上看到报告byte[]的

  • 问题内容: 我正在客户端和Django服务器之间发送信息,并且我想对此使用JSON。我正在发送简单的信息-字符串列表。我尝试使用,但是当我这样做时, 看来这只能用于Django对象。如何序列化简单的Python对象? 问题答案: 你可以使用纯Python执行此操作: