当我尝试将json转换为map时,我遇到了一个问题。
我使用jakson,这是我的mapper():
mapper = new ObjectMapper();
mapper.setTimeZone(TimeFormat.getDefaultTimeZone());
mapper.configure(com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS, false);
mapper.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setSerializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL);
mapper.configure(Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);
DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
format.setTimeZone(TimeFormat.getDefaultTimeZone());
mapper.setDateFormat(format);
这是“坏”' JSON:
{..."id":660273193,"orderId":220575205,"orderItemAmount":5.6,"orderItemNum":2,"orderItemPrice":2.8,"productCName":"16\\" Shoes","productId":23373137,...
错误信息是:意外字符(' S'(代码22609 / 0x5851)):期待逗号分隔OBJECT条目 用户设置16" 10作为productName,但无法将其从json转换为map。 我尝试过Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER但不起作用。 在这种情况下,我找不到任何配置吗?
答案 0 :(得分:2)
如果从外部源读取,则应该使用一个反斜杠来转义引用;如果从Java常量读取JSON字符串,则应使用三个反斜杠。这是一个例子:
public class JacksonBackslash {
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
// mapper.configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);
String json = "{\"productCName\":\"16\\\" Shoes\"}";
System.out.println(json);
System.out.println(mapper.readValue(json, new TypeReference<Map<String, Object>>() {}));
}
}
输出:
{"productCName":"16\" Shoes"}
{productCName=16" Shoes}