如果我想将字符串字段序列化为整数(json),如何在Java中创建序列化

问题描述 投票:0回答:1

我需要在 JSON 中创建整数字段,其中包含字符串值(例如 { "code":abc } (通常应该像这样 { "code":"abc" } 对于字符串值或 { "code":123 }对于整数值。我如何用 Java 做到这一点?

java json
1个回答
0
投票

生成的 JSON 将无效,因为字符串始终需要引号。因此,Jackson 或 gjson 等标准库不会为您生成该 JSON。 JSON 解析器也将无法解析此 JSON。

因此,我不明白你为什么要这样做?字符串是某种占位符吗?你真的确定你做的是正确的事吗?

如果您仍然需要/想要创建此 JSON,则需要手动创建它或进行一些字符串后处理。

如果您的对象包含超过 2 或 3 个属性,而我会使用 Jackson 生成 JSON 文件,请添加一个序列化器来添加前缀和后缀。在最后一步中只需进行字符串替换:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.module.SimpleModule;

import java.io.IOException;

public class MyClass {

    @JsonProperty
    private final long variableA ;

    @JsonProperty
    private final long variableB;

    @JsonProperty
    private final String variableC;

    @JsonSerialize(using = MyCustomSerializer.class)
    private final String code;

    public MyClass(final long variableA, final long variableB, final String variableC, final String code) {
        this.variableA = variableA;
        this.variableB = variableB;
        this.variableC = variableC;
        this.code = code;
    }

    public static void main(String args[]) throws JsonProcessingException {
        MyClass mc = new MyClass(1, 2, "3", "abc");
        ObjectMapper mapper = new ObjectMapper();

        SimpleModule module = new SimpleModule();
        mapper.registerModule(module);

        final String serialized = mapper.writeValueAsString(mc);
        System.out.println(serialized);
        final String customJson = serialized.replace("\"___", "").replace("___\"", "");
        System.out.println(customJson);
    }


    public static class MyCustomSerializer extends JsonSerializer<String> {

        @Override
        public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
            gen.writeString("___" + value + "___");
        }
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.