我需要在 JSON 中创建整数字段,其中包含字符串值(例如 { "code":abc } (通常应该像这样 { "code":"abc" } 对于字符串值或 { "code":123 }对于整数值。我如何用 Java 做到这一点?
生成的 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 + "___");
}
}
}