67

I am learning d3. There are certain ways of loading the data in d3 js. But all of them seem to make a HTTP GET. In my scenario, I already have the json data in a string. How can I use this string instead of making another http request? I tried to look for documentation for this but found none.

This works:

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

Now, if I have:

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

How do I use already computed 'myjson' in d3 & avoid a async call to server? Thanks.

3
  • What is it that you want to do with the object? Also, why would you hard-code that as a string instead of as a plain JavaScript object? Commented Jun 7, 2012 at 15:36
  • 1
    @Pointy The server returns it as a model attribute in the response. So I have the string. For eg, the json I have corresponds to the code in mbostock.github.com/d3/ex/bubble.html Thats the logic that goes in there Commented Jun 7, 2012 at 15:41
  • See also stackoverflow.com/questions/20940854/… Commented Apr 9, 2014 at 7:52

3 Answers 3

83

Simply replace d3.json call with

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

UPDATE 09/2013

Original code has changed. So varname json should be root:

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

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

    //rendering logic here

//} #delete this line
Sign up to request clarification or add additional context in comments.

7 Comments

Got that part. Can you let me know how to use this parsed 'json' object to render the graph (without making a GET reqeust) found here mbostock.github.com/d3/ex/bubble.html The example uses d3.json("../data/flare.json", function(json) which makes a http call. Any pointers to docs/examples will help too. Thanks.
@Ravi replace line 14 with json = JSON.parse( myjson ); and delete line 33. Try it
Tried it. Worked perfectly! Now I see what is happening... Thank you!!
Thanks, I had similar situation. Of course obvious now that it works but your guidance was helpful since I am still getting my bearings with d3.
wait, how exactly is the variable json being passed to d3 library? Can you explain what is happening here?
|
3

The answer from chumkiu worked great for me but needed a couple of tweaks - in the latest version of the d3 bubble chart, you need to define root rather than json, as in

 root = JSON.parse( myjson );

Alternatively, you could replace "root" with "json" in the rest of the code of course. :-)

For anyone coming to this answer with questions about d3 node-link trees that utilize local data sets, this answer worked great for me - many thanks to the contributors on this page.

Comments

2

According to this example:

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

Here they are storing the graph data within the variable $data, and setting it via the .data($data) function.

I'd apply this method to whatever graph you are using.

1 Comment

This might work; They have a similar example here: github.com/mbostock/d3/wiki/Selections#wiki-data

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.