2012-06-07 11 views
62

Sto imparando d3. Ci sono certain ways of loading the data in d3 js. Ma tutti sembrano fare un HTTP GET. Nel mio scenario, ho già i dati JSON in una stringa. Come posso usare questa stringa invece di fare un'altra richiesta http? Ho provato a cercare la documentazione per questo ma non ne ho trovata.d3 js - caricamento json senza http get

Questo funziona:

d3.json("/path/flare.json", function(json) { 
    //rendering logic here 
} 

Ora, se ho:

//assume this json comes from a server (on SAME DOMAIN) 
var myjson = '{"name": "flare","children": [{"name": "analytics","children": [{"name": "cluster","children": [{"name": "MergeEdge", "size": 10 }]}]}]}'; 

Come si utilizza già calcolati 'myjson' in d3 & evitare una chiamata asincrona al server? Grazie.

+0

Che cosa vuoi fare con l'oggetto? Inoltre, perché dovresti codificarlo come una stringa anziché come un semplice oggetto JavaScript? – Pointy

+1

@Pointy Il server lo restituisce come attributo modello nella risposta. Quindi ho la stringa. Ad esempio, il json che ho corrisponde al codice in http://mbostock.github.com/d3/ex/bubble.html Questa è la logica che va lì – Ravi

+0

Vedere anche http://stackoverflow.com/questions/20940854/how-to-load-data-from-an-internal-json-array-piuttosto-than-from-an-external-resour –

risposta

80

Basta sostituire d3.json chiamata con

json = JSON.parse(myjson); 

IE:

var myjson = '{"name": "flare","children": [{"name": "analytics","children": [{"name": "cluster","children": [{"name": "MergeEdge", "size": 10 }]}]}]}'; 

// d3.json("/path/flare.json", function(json) { #delete this line 

    json = JSON.parse(myjson); //add this line 

    //rendering logic here 

//} #delete this line 

AGGIORNAMENTO 09/2013

Codice originale è cambiato. Così nomevar json dovrebbe essere root:

// d3.json("flare.json", function(error, root) { #delete this line 

    root = JSON.parse(myjson); //add this line 

    //rendering logic here 

//} #delete this line 
+1

Ottenuto quella parte. Puoi farmi sapere come usare questo oggetto 'json' analizzato per rendere il grafico (senza fare un reqeust GET) trovato qui http://mbostock.github.com/d3/ex/bubble.html L'esempio usa * d3. json ("../ data/flare.json", funzione (json) * che effettua una chiamata http Anche eventuali indicazioni su documenti/esempi. Grazie – Ravi

+6

@Ravi sostituire la riga '14' con' json = JSON.parse (myjson); 'ed elimina la riga' 33'. Provalo –

+0

Provato. Ha funzionato perfettamente! Ora vedo cosa sta succedendo ... Grazie !! – Ravi

2

Secondo questo esempio:

http://phrogz.net/JS/d3-playground/#StockPrice_HTML

Eccole la memorizzazione dei dati del grafico all'interno del $ dati variabili, e l'impostazione tramite il .data ($ dati).

Applicherei questo metodo a qualsiasi grafico che si sta utilizzando.

+0

Questo potrebbe funzionare; Hanno un esempio simile qui: https://github.com/mbostock/d3/wiki/Selections#wiki-data – Adrian

2

La risposta da chumkiu ha lavorato molto per me, ma aveva bisogno di un paio di modifiche - nella versione più recente del grafico a bolle D3, è necessario definire radice invece di JSON, come in

root = JSON.parse(myjson); 

In alternativa, è potrebbe sostituire "root" con "json" nel resto del codice, naturalmente. :-)

Per chi arriva a questa risposta con domande sugli alberi di collegamento nodo d3 che utilizzano set di dati locali, questa risposta ha funzionato benissimo per me - molte grazie ai contributori su questa pagina.