17

I am trying to build a web project where I get details in JSON format, for example:

{
    "file_id": 333, 
    "t": "2016-03-08 12:00:56"
}

I was trying to show the output in d3 js bar chart. The problem I am facing is the code I've got is working for a JSON file but not for an object deserialized from the JSON. Can any one help me out with this?

The part of the working script for JSON file is this:

d3.json("FILENAME", function(error, data) {
    data = JSON.parse(data);
    x.domain(data.map(function(d) { return d.letter }));
    y.domain([0, d3.max(data, function(d) { return d.frequency })]);

If I change the filename to an object its not working.

Lars Kotthoff
  • 107,425
  • 16
  • 204
  • 204
monic
  • 279
  • 1
  • 5
  • 11

2 Answers2

28

being a JS library D3 works with the JS objects(along with other JS data types) only, d3.json is just a method to load the object from an external file. So if you dont need to load data from external file then dont use d3.json

//d3.json("FILENAME", function(error, data) {
    //data = JSON.parse(data);
    var data = {
        "file_id": 333, 
        "t": "2016-03-08 12:00:56"
    }; //your own object
    x.domain(data.map(function(d) { return d.file_id}));
    y.domain([0, d3.max(data, function(d) { return d.t})]);

hope it helps

panghal0
  • 531
  • 4
  • 10
  • What about pulling the json data from a cookie? I pulled the json data from a cookie to a variable, but cannot get my graph to update using the d3.json function. It appears from this answer that one cannot do this with the d3.json function. Can you use the function and pull the data from a cookie, or just a file only? – antman1p May 25 '19 at 13:49
  • It doesn't matter from where and how you pull the data. in the end its all about passing required data to d3 methods. If you need to fetch it from a file use d3.json, otherwise it's not required. It will be better if you can provide some code about how you are doing it, otherwise it's hard to guess what's the problem you are facing. a jsfiddle or any similar service link to your code will be more helpful. – panghal0 May 27 '19 at 05:16
1

If I change the filename to an object its not working.

Then you should call it in a function and pass the object in the params:

var obj = {}; // the object to be be passed for chart

function updateGraph(o){ // get in the params here
    var x = d3.scale.ordinal().rangeRoundBands([0, width]),
        y = d3.scale.linear().range([height, 0]);

    x.domain(o.letter);
    y.domain([0, o.frequency]);
}

updateGraph(obj); // <----pass it here
Jai
  • 74,255
  • 12
  • 74
  • 103