Java 使Jackson对输入JSON更友好
我是否有办法降低Jackson对输入JSON的要求。例如,JSONObject提供以下津贴: 构造器在他们将接受的文本中更加宽容:Java 使Jackson对输入JSON更友好,java,json,jackson,deserialization,Java,Json,Jackson,Deserialization,我是否有办法降低Jackson对输入JSON的要求。例如,JSONObject提供以下津贴: 构造器在他们将接受的文本中更加宽容: 右大括号前面可能会出现一个额外的(逗号) 字符串可以用“(单引号)引起来 如果字符串不以引号或单引号开头,并且不包含前导空格或尾随空格,并且不包含以下任何字符,则根本不需要使用引号:{}[]/\:,=;#如果它们看起来不像数字,如果它们不是保留字true、false或null* 键后面可以跟有=或=>以及: 值后面可以是;(分号)以及by(逗号) 数字可以有0x-(
new JSONObject("{A : 1}");
。。。但对于jackson,我将得到一个输入json相同的错误:
new ObjectMapper().readTree("{ A : 1}"); // throws an exception
例外情况:
org.codehaus.jackson.JsonParseException: Unexpected character ('A' (code 65)): was expecting double-quote to start field name
at [Source: java.io.StringReader@26d4f1; line: 1, column: 4]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:943)
at org.codehaus.jackson.impl.JsonParserBase._reportError(JsonParserBase.java:636)
at org.codehaus.jackson.impl.JsonParserBase._reportUnexpectedChar(JsonParserBase.java:569)
at org.codehaus.jackson.impl.ReaderBasedParser._handleUnusualFieldName(ReaderBasedParser.java:342)
at org.codehaus.jackson.impl.ReaderBasedParser._parseFieldName(ReaderBasedParser.java:235)
at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:125)
at org.codehaus.jackson.map.deser.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:180)
at org.codehaus.jackson.map.deser.BaseNodeDeserializer.deserializeAny(JsonNodeDeserializer.java:210)
at org.codehaus.jackson.map.deser.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:52)
at org.codehaus.jackson.map.deser.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:13)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1588)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1130)
查看相关问题。它展示了如何配置
ObjectMapper
来做您想要做的事情,并且它还对您为什么不想这样做进行了一些很好的讨论:)非标准JSON的扩展列表(即不是JSON的东西,但是非常接近,可以支持它)可以从以下位置找到:
从您的列表中,(2)和(3)可以完成(再加上一些其他未列出的事情,如commnet)。其他人不受支持;尽管该项目增加了对一些常用扩展的支持,但考虑的范围还是有限的。当然,总是可以要求新的特性;根据请求、用例添加特性
在我个人看来,一个人要么遵循标准,要么定义新的格式——HTML就是一个很好的例子,说明当试图支持“几乎但不完全”有效的东西时,会遇到老鼠洞。调整永无止境,互操作性受到影响:因为没有标准,所有实现都支持一些不兼容的特性和构造子集