Ho un file JSON che può avere più tipi.Analisi di JSON in Jackson usando un approccio stream/object
Ad esempio:
{
"dog": {
"owner" : "John Smith",
"name" : "Rex",
"toys" : {
"chewtoy" : "5",
"bone" : "1"
}
},
"person": {
"name" : "John Doe",
"address" : "23 Somewhere Lane"
}
// Further examples of dogs and people, and a few other types.
}
Voglio analizzare questi in oggetti. vale a dire. Voglio creare un oggetto Dog con gli attributi proprietario/nome/giocattoli e una persona con gli attributi nome/indirizzo e utilizzare Jackson per leggere e creare oggetti da essi.
L'ordine conta, ho bisogno di sapere che Rex è arrivato prima di John Doe, per esempio. Preferirei fare con un approccio simile al flusso (cioè leggere e analizzare Rex nell'oggetto Dog, fare qualcosa con esso, quindi scartarlo, quindi passare a John Doe). Quindi ho bisogno di un approccio basato sul flusso.
Non riesco a capire come utilizzare sia l'API di lettura del flusso (da passare in ordine), sia l'interfaccia ObjectMapper (per creare oggetti Java da JSON).
(1) La tua domanda sullo streaming o l'analisi simile a SAX è totalmente valida. +1. Ma (2) i tuoi dati non sono ben progettati se ordini argomenti in un dizionario. I dizionari JSON sono intrinsecamente non ordinati. Se hai bisogno di un ordine, usa un array e codifica le informazioni sul tipo (cane/persona) come un attributo. –
Hmm. La fonte dei dati è probabilmente immutabile (non sotto il mio controllo). Quando dici di usare un array e di codificare le informazioni, intendi farlo manualmente? (Leggi tutti i token e crea gli oggetti appropriati chiamando i setter appropriati) O c'è un modo per farlo usando Jackson? –
Intendo dire che i dati JSON dovrebbero venire sotto forma di array se l'ordine è importante, con tipi codificati con ciascun oggetto. Ma se non controlli i dati JSON, allora non importa-- dovrai occuparti dell'analisi del flusso come suggerisci. :) Non ho la risposta alla tua domanda, anche se qualcun altro qui sicuramente lo farà. Ma sappi che chiunque abbia inventato questo formato JSON sta giocando con il fuoco. È molto delicato affidarsi all'ordine delle chiavi in un dizionario, per non parlare del dolore nel culo che crea per le persone (voi) che stanno cercando di affrontarlo - va contro la maggior parte degli strumenti. –