相关疑难解决方法(0)

在jackon JSON库中ALLOW_UNQUOTED_FIELD_NAMES

我正在使用jackson库对JSON进行序列化/反序列化.我需要这个JSON尽可能小,所以我启用了ALLOW_UNQUOTED_FIELD_NAMES功能来消除所有引号.我知道删除引号不是标准的json,但是使json变小是项目的一项硬性要求.生成的json有效,但是当我尝试读取json值时,我得到一个异常:

org.codehaus.jackson.JsonParseException:意外的字符('9'(代码57)):期望有效的名称字符(对于不带引号的名称)或双引号(对于引用)在[Source:java.io]处启动字段名称.StringReader @ 1347d75; line:1,column:3]

当我读到这个json时抛出上面的异常:

{90110a2e-febd-470f-afa4-cf7e890d31b9:0,eec652ad-a4d9-4eb1-8d24-7c1a0c29449f:1}
Run Code Online (Sandbox Code Playgroud)

我读它的方式是:

Map<String, Object> valuesMap = oM.readValue(json, new TypeReference<Map<String, Object>>() {});
Run Code Online (Sandbox Code Playgroud)

我用它来读取和写入值的对象映射器是:

private static final ObjectMapper om = new ObjectMapper();
static {
    om.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
    om.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
    om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, true);
    om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    om.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
}
Run Code Online (Sandbox Code Playgroud)

我在发送者和接收者项目中都使用了Jackson的1.6.3版本.这个功能所需的版本是1.2+,所以我想也许我没有使用这个版本,但我的接收器是一个Spring应用程序,我检查了libs文件夹中安装的库是1.6.3.

我可能做错了什么?也许此功能不能与地图一起使用.

我有另一个问题,到目前为止我只是发送一个地图,其中键只是一个uuid值,值是一个数字.如果我发送带有ALLOW_UNQUOTED_FIELD_NAMES功能的特殊字符的值,可能会有任何问题吗?杰克逊会逃脱这个角色吗?

谢谢.

java spring parsing json jackson

15
推荐指数
2
解决办法
2万
查看次数

标签 统计

jackson ×1

java ×1

json ×1

parsing ×1

spring ×1