将double属性序列化为字符串

时间:2019-09-02 17:58:14

标签: java json jackson

当我要对一个Bean进行JSON转换但将一个属性序列化为字符串时,必须使用@JsonXyz批注。

一个例子: 我有一个豆子:

public MyBean {
    private double myDouble;
    //getter and setter
}

我想要一个类似JSON的

{'myDouble':'100.0'}

代替:

{'myDouble':100.0}

因此,值100.0应该用引号引起来。

4 个答案:

答案 0 :(得分:1)

如果您使用的是Jackson,则可以使用@JsonSerializeToStringSerializer

public MyBean {
    @JsonSerialize(using = ToStringSerializer.class)
    private double myDouble;
    //getter and setter
    //constructors
}

要测试的代码(杰克逊版本2.9.8):

MyBean myBean = new MyBean(20.3);

ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(myBean);

System.out.println(json);

输出为:

{"myDouble":"20.3"}

答案 1 :(得分:1)

您可以将@JsonSerializeToStringSerializer结合使用:

@Data
public class MyBean {

    @JsonSerialize(using = ToStringSerializer.class)
    private double myDouble;
}

或将@JsonFormatJsonFormat.Shape.STRING一起使用:

@Data
public class MyBean {

    @JsonFormat(shape = Shape.STRING)
    private double myDouble;
}

两种方法都会产生相同的结果。


如果您打算在多个地方使用这些注释,可以考虑使用@JacksonAnnotationsInside来创建包含一个或多个Jackson注释的自定义注释:

@Retention(RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = ToStringSerializer.class)
public @interface JsonString {

}
@Data
public class MyBean {

    @JsonString
    private double myDouble;
}

答案 2 :(得分:0)

因此要转换为字符串,您需要调用double的非基元,即Double

如下:

double myDouble = 10.0;
Double.toString(myDouble);

这样,您的double现在将成为字符串,但是您选择解析为json时,现在会将结果视为字符串,而不是double或Number

答案 3 :(得分:0)

将getter更改为以字符串形式而不是double形式返回值

return String.valueof(variable)

然后将setter作为字符串参数获取值,并用Double.parseDouble(variable)设置double值

Double myDouble;
public String getMyDouble(){
            return String.valueof(myDouble);
            }
public void setMyDouble(String str){
            myDouble = Double.parseDouble(str);
            }