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

使用jackson注解在名称与其getter不同的字段上使用jsonUn包装

鞠边浩
2023-03-14

我有一门课,比如:

class Car {
    private Engine myEngine;

    @JsonProperty("color")
    private String myColor;  

    @JsonProperty("maxspeed")
    private int myMaxspeed;

    @JsonGetter("color")
    public String getColor()
    {
        return myColor;
    }

    @JsonGetter("maxspeed")
    public String getMaxspeed()
    {
        return myMaxspeed;
    }

    public Engine getEngine()
    {
        return myEngine;
    }
}

发动机等级如下

class Engine {
    @JsonProperty("fueltype")
    private String myFueltype;

    @JsonProperty("enginetype")
    private String myEnginetype;

    @JsonGetter("fueltype")
    public String getFueltype()
    {
        return myFueltype;
    }

    @JsonGetter("enginetype")
    public String getEnginetype()
    {
        return myEnginetype;
    }
}

我想使用Jackson将Car对象转换为JSON,其结构如下

'car': {
   'color': 'red',
   'maxspeed': '200',
   'fueltype': 'diesel',
   'enginetype': 'four-stroke'
 } 

我已经尝试了本文提供的答案,但它对我不起作用,因为字段名和getter不同

我知道如果字段名是engine,我可以在engine上使用@jsonunwrpped。但在这种情况下该怎么办呢。

共有3个答案

公良光熙
2023-03-14

我认为这里最好的解决方案是在您的引擎类中的myEngineType属性上使用注释,它只会序列化此属性,而不是整个引擎对象。

因此,您的代码如下所示:

class Engine {

    @JsonProperty("fueltype")
    private String myFueltype;

    @JsonValue
    @JsonProperty("enginetype")
    private String myEnginetype;

}

您可以查看此答案以了解更多详细信息。

戚京
2023-03-14

对于所需的JSON对象,您应在Car类中使用@JsonUnlie,如下所示:

class Car {

    @JsonUnwrapped
    private Engine myEngine;

    @JsonProperty("color")
    private String myColor;  

    @JsonProperty("maxspeed")
    private int myMaxspeed;
    ...
东郭元魁
2023-03-14

一起提供@JsonUn包装@JsonProperty

@JsonUnwrapped
@JsonProperty("engine")
private Engine myEngine;
 类似资料:
  • 问题内容: 根据本文档,我只能在具有相同名称的字段之间建立联接。 您是否知道是否可以在名称不同的字段上连接两个DataFrame? SQL中的等效项为: 问题答案: 我认为您可以使用来实现。传递关键字参数作为,并告诉Pandas每个DataFrame中的哪一列用作键: 文档在本页上对此进行了详细描述。

  • 问题内容: 我正在使用杰克逊将我的对象转换为json。该对象具有2个字段: 由于我想将其与jQuery自动完成功能一起使用,因此我希望“ id”在json中显示为“ value”,在“ name”中显示为“ label”。杰克逊的文档不明确这一点,我已经想尽注释,甚至远程好像它做什么,我需要,但我不能让显示为,并显示为在JSON。 有谁知道该怎么做或是否可能? 问题答案: 您是否尝试过使用@Jso

  • 问题内容: 有人可以帮我弄这个吗。 我有我的选择查询 我想要选择查询的内容,并在下载csv文件时包含标题,因此我执行了以下查询: 但这给了我这个错误 我想在我下载的csv文件中有这样的输出: 先感谢您。 问题答案: 如错误所示:来自查询的词典包含的键多于您在DictWriter构造函数中指定的字段名称。 一种解决方案是提前对其进行过滤,如下所示: 另一种解决方案是仅使用那些字段来构造查询: 但是,

  • 问题内容: 如果json字段包含冒号(:),我们如何解析?像这样: 实际上,我想知道如何使用诸如restsharp之类的库来进行映射? 问题答案: 使用Json.Net 要么

  • 我得到了(超过)两个Api POSTendpoint。每一个都需要一个json作为参数。但是当我在两个endpoint参数类中使用相同的类名负载时,Swagger就不起作用了。当我改变其中的一个,例如从有效载荷到有效载荷1时,它就不起作用了。当然,我在包装类中设置了正确的名称空间,以便它找到负载。但我希望每次都使用相同的名称“有效载荷”。如何使用相同的类名负载?在这两种情况下,我都可以保留json

  • 我有一个Java程序,我可以把它变成一个安装程序exe,使一个应用程序exe 我希望安装程序exe看起来像,而实际的应用程序看起来像jpackage,我看不到这样做的方法,也看不到其他人这样做的例子。目前,我的安装程序和我的应用程序具有相同的名称。 我不想要jpackage的替代品,我知道还有其他方法,我只是在寻找用jpackage做这件事的方法。