2012-06-07 20 views
62

Estoy aprendiendo d3. Hay certain ways of loading the data en d3 js. Pero todos parecen hacer un HTTP GET. En mi caso, ya tengo los datos json en una cadena. ¿Cómo puedo usar esta cadena en lugar de hacer otra solicitud http? Intenté buscar documentación para esto pero no encontré ninguna.d3 js - cargando json sin un http get

Esto funciona:

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

Ahora, si tengo:

//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 }]}]}]}'; 

¿Cómo uso contabilizado ya 'myjson' en d3 & evitar una llamada asíncrona con el servidor? Gracias.

+0

¿Qué es lo que quieres hacer con el objeto? Además, ¿por qué codificaría eso como una cadena en lugar de como un objeto JavaScript sin formato? – Pointy

+1

@Pointy El servidor lo devuelve como un atributo de modelo en la respuesta. Así que tengo la cadena. Por ejemplo, el json que tengo corresponde al código en http://mbostock.github.com/d3/ex/bubble.html Esa es la lógica que va allí – Ravi

+0

Ver también http://stackoverflow.com/questions/20940854/how-to-load-data-from-an-internal-json-array-rather-than-an-external-resour –

Respuesta

80

Sólo tiene que sustituir d3.json llamada 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 

ACTUALIZACIÓN 09/2013

Código original ha cambiado. Así nombre_var json debería ser 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

Tengo esa parte. ¿Puede decirme cómo usar este objeto 'json' analizado para representar el gráfico (sin hacer un requisito GET) que se encuentra aquí? Http://mbostock.github.com/d3/ex/bubble.html El ejemplo usa * d3. json ("../ data/flare.json", función (json) * que hace una llamada http. Cualquier puntero a docs/ejemplos también ayudará. Gracias. – Ravi

+6

@Ravi reemplace la línea '14' con' json = JSON.parse (myjson); 'y eliminar la línea' 33'. Pruébalo –

+0

Lo intenté. ¡Funcionó perfectamente! Ahora veo lo que está sucediendo ... ¡Gracias! – Ravi

2

De acuerdo con este ejemplo:

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

Aquí se están almacenando los datos del gráfico de datos dentro de la variable $, y se establece a través de la .data ($ datos) función.

Aplicaría este método al gráfico que esté utilizando.

+0

Esto podría funcionar; Tienen un ejemplo similar aquí: https://github.com/mbostock/d3/wiki/Selections#wiki-data – Adrian

2

La respuesta de chumkiu funcionó muy bien para mí, pero necesitaba un par de ajustes - en la última versión del gráfico de burbujas d3, es necesario definir la raíz en lugar de JSON, como en

root = JSON.parse(myjson); 

alternativa, podría reemplazar "raíz" con "json" en el resto del código, por supuesto. :-)

Para cualquier persona que llegue a esta respuesta con preguntas sobre los árboles de enlace de nodo d3 que utilizan conjuntos de datos locales, esta respuesta funcionó muy bien para mí, muchas gracias a los colaboradores en esta página.