gpt4 book ai didi

jackson - 创建不带引号的 JSON

转载 作者:行者123 更新时间:2023-12-02 17:34:20 42 4
gpt4 key购买 nike

一个图书馆正在使用 Map 来使用一些额外的信息。该 map 最终被转换为 JSON 对象,我需要设置请求信息以显示以进行调试,如下所示:

map.put("request", requestString);

我正在考虑专门使用 Jackson 创建一个不带引号的 JSON,并希望将其设置为 requestString

我正在构建有关Request 的必要信息并构建一个 Map,包括请求 header 、参数、方法等。

Jackson 正在创建带有引号的完全有效的 JSON,但是当我在 map 中设置这个生成的值时,由于转义了引号,它显示得很丑。

所以 Jackson 正在创造这个:

{
method : "POST",
path : "/register"
}

当我在 map 中设置这个时,它变成了这个:

{
method : \"POST\",
path : \"/register\"
}

将其视为一个巨大的 map ,包括所有参数和有关请求的其他信息。

我想要的是:

{
method : POST,
path : /register
}

我知道这不是有效的 JSON,但我将其用作接受字符串值的 map 的字符串。

最佳答案

public class UnQuotesSerializer extends NonTypedScalarSerializerBase<String>
{
public UnQuotesSerializer() { super(String.class); }

/**
* For Strings, both null and Empty String qualify for emptiness.
*/
@Override
public boolean isEmpty(String value) {
return (value == null) || (value.length() == 0);
}

@Override
public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeRawValue(value);
}

@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint) {
return createSchemaNode("string", true);
}

@Override
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint) throws JsonMappingException {
if (visitor != null) visitor.expectStringFormat(typeHint);
}
}

ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule("UnQuote");
module.addSerializer(new UnQuotesSerializer());

objectMapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
objectMapper.registerModule(module);

这是生成不带引号的字符串。

关于jackson - 创建不带引号的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28788331/

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