gpt4 book ai didi

java - 如何在 json 数组中将 boolean 值写为字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:46 25 4
gpt4 key购买 nike

JsonGenerator generator = 
new JsonFactory().createJsonGenerator(new JSONWriter(response));
generator.configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS, true);

我使用 JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS 将数字作为字符串写入 json。但是,我找不到类似的功能来将 boolean 值写入字符串。

最佳答案

我也找不到 boolean 值的类似功能。因此,我建议为 boolean 字段编写新的序列化器和反序列化器。

看我的例子:

public class JacksonProgram {

public static void main(String[] args) throws IOException {
Foo foo = new Foo();
foo.setB(true);
foo.setS("Test");
foo.setI(39);

ObjectMapper objectMapper = new ObjectMapper();
JsonFactory jsonFactory = new JsonFactory();

StringWriter stringWriter = new StringWriter();
JsonGenerator jsonGenerator = jsonFactory.createGenerator(stringWriter);
jsonGenerator.enable(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS);
objectMapper.writeValue(jsonGenerator, foo);
System.out.println(stringWriter);

JsonParser jsonParser = jsonFactory.createJsonParser(stringWriter.toString());
Foo value = objectMapper.readValue(jsonParser, Foo.class);
System.out.println(value);
}
}

class BooleanSerializer extends JsonSerializer<Boolean> {

@Override
public void serialize(Boolean value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
jsonGenerator.writeString(value.toString());
}
}

class BooleanDeserializer extends JsonDeserializer<Boolean> {

public Boolean deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
return Boolean.valueOf(jsonParser.getValueAsString());
}
}

class Foo {

@JsonSerialize(using = BooleanSerializer.class)
@JsonDeserialize(using = BooleanDeserializer.class)
private boolean b;
private String s;
private int i;

public boolean isB() {
return b;
}

public void setB(boolean b) {
this.b = b;
}

public String getS() {
return s;
}

public void setS(String s) {
this.s = s;
}

public int getI() {
return i;
}

public void setI(int i) {
this.i = i;
}

@Override
public String toString() {
return "Foo [b=" + b + ", s=" + s + ", i=" + i + "]";
}
}

输出:

{"b":"true","s":"Test","i":"39"}
Foo [b=true, s=Test, i=39]

编辑

我认为,您应该将 SimpleModule 配置添加到 ObjectMapper:

SimpleModule simpleModule = new SimpleModule("BooleanModule");
simpleModule.addSerializer(Boolean.class, new BooleanSerializer());
simpleModule.addDeserializer(Boolean.class, new BooleanDeserializer());

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(simpleModule);

现在,您应该能够序列化 boolean/Object List-s 和 Map-s。

关于java - 如何在 json 数组中将 boolean 值写为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16564639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com