Algoritmo efficiente per l'attraversamento gerarchico? Idratazione JSON, per esempio

2

Sto scrivendo una piccola libreria che ti aiuta a idratare i dati JSON in oggetti. Dato questo esempio JSON:

{
    "date": "1970-01-01 00:00:00",
    "foobar": "baz",
    "user": {
        "name": "foobar",
        "id": 2
    }
}

E il seguente set di regole della libreria:

Hydrator hydrator = new Hydrator
hydrator.add("date", DateTime)
hydrator.add("foobar", String)
User user = hydrator.add("user", User)
user.add("name", String)
user.add("type", Integer)

DataSet data = hydrator.parse(jsonInput)

Finora, sta funzionando alla grande. Ho creato un nodo e ogni nodo può avere figli. Eseguo semplicemente l'intero file JSON, creo le istanze Node per ogni chiave / valore e creo la gerarchia. Quando istempio il nodo, aggiungo alcuni metadati. Quindi, in un grande metodo, passo attraverso l'intero albero dei nodi e idrato a seconda dei metadati. Tuttavia, sto cercando un modo efficace per farlo, poiché ha finito per essere un po 'lento.

    
posta vinnylinux 29.07.2015 - 20:49
fonte

1 risposta

2

Un attraversamento approfondito post-ordine abbastanza standard dovrebbe funzionare bene, in tempo lineare su il numero di nodi. Il trucco principale è attraversare insieme il tuo albero idrogeno e l'albero dei dati. Il post-ordine significa che tutte le dipendenze saranno istanziate prima che siano necessarie più in alto. In pseudocodice, sarebbe simile a questo:

traverse(hydrator_node, json_node)
  for each child of hydrator node
    throw error if json_node doesn't have matching child
    recursively call traverse(hydrator_child, json_child)

  instantiate current node
    
risposta data 29.07.2015 - 21:25
fonte

Leggi altre domande sui tag