sto usando la libreria Jackson per la serializzazione/deserializzazione da/JSON. Ho bisogno che questo JSON abbia la dimensione più piccola possibile, quindi ho abilitato la funzione ALLOW_UNQUOTED_FIELD_NAMES per eliminare tutte le virgolette. So che rimuovere le virgolette non è un errore standard, ma rendere JSON Small è un requisito fondamentale del progetto. JSON generato funziona, ma quando ho cercando di leggere il valore JSON sto diventando un'eccezione:ALLOW_UNQUOTED_FIELD_NAMES in Jackon JSON biblioteca
org.codehaus.jackson.JsonParseException: carattere imprevisto ('9' (codice 57)): aspettavo né nome valido carattere (per il nome non quotate) o doppia citazione (per citato) per avviare nome campo in [Fonte: [email protected]; line: 1, colonna: 3]
L'eccezione sopra viene generata quando ho letto questo JSON:
{90110a2e-febd-470f-afa4-cf7e890d31b9:0,eec652ad-a4d9-4eb1-8d24-7c1a0c29449f:1}
Il modo ho letta è:
Map<String, Object> valuesMap = oM.readValue(json, new TypeReference<Map<String, Object>>() {});
e l'oggetto Il mapper che uso sia per leggere sia per scrivere i valori è:
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);
}
Sto usando la versione 1.6.3 di Jackson, in entrambi i progetti del mittente e del destinatario. La versione necessaria per questa funzione è 1.2+, quindi ho pensato che forse non stavo usando questa versione, ma il mio ricevitore è un'applicazione Spring e ho controllato che la libreria installata nella cartella libs sia la 1.6.3.
Cosa posso fare di sbagliato? Forse questa funzione non può essere utilizzata con le mappe.
Ho un'altra domanda, Finora sto solo l'invio di una mappa in cui la chiave è solo un valore uuid e il valore è un numero. Posso avere problemi se invio un valore con caratteri speciali con la funzione ALLOW_UNQUOTED_FIELD_NAMES? Jackson sfuggirà a questi personaggi?
Grazie.
Ottimo punto sul sorriso: può essere compatto, specialmente quando si abilitano i riferimenti back valore stringa (se ci sono molti valori stringa ripetuti, come i valori enumerati) – StaxMan