¿Tengo alguna manera de hacer que Jackson sea menos exigente con la entrada JSON? P.ej. JSONObject proporciona siguientes asignaciones:Haga que Jackson sea más amigable para la entrada JSON
Los constructores son más tolerantes en los textos que aceptarán:
- Un extra, (coma) pueden aparecer justo antes de la llave de cierre.
- Las cadenas pueden citarse con '(comilla simple).
- Las cadenas no necesitan ser citadas si no comienzan con una comilla o comilla simple, y si no contienen espacios iniciales o finales, y si no contienen ninguno de estos caracteres: {} []/\:, =; # y si no se parecen a los números y si no son las palabras reservadas verdadero, falso o nulo. *
- Las teclas pueden ir seguidas de = o => así como también por:.
- Los valores pueden ser seguidos por; (punto y coma) así como por, (coma).
- Los números pueden tener el prefijo 0x- (hexadecimal).
Lo más interesante para mí es el 3er punto. Permite siguiente conversión:
new JSONObject("{A : 1}");
... pero para Jackson que obtendrá un error con el mismo JSON de entrada:
new ObjectMapper().readTree("{ A : 1}"); // throws an exception
Excepción:
org.codehaus.jackson.JsonParseException: Unexpected character ('A' (code 65)): was expecting double-quote to start field name
at [Source: [email protected]; 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)