Anton
Anton

Reputation: 796

Use generated json object instead d3.json

I missed a lot of time that to resolve this problem but unlucky. I know how to render d3 tree with external file, but how to do that with generated object. I'm getting Json object thru this code:

   $.when($.getJSON('data/clinical.json'), $.getJSON('data/industry.json'))
        .then(function (a, b) {
            return $.extend(a[0], b[0]);
        })
        .then(function (data) {
           var json = JSON.stringify(data);
            console.log('['+ json +']');

and have added json to d3.json

treeJSON = d3.json(json, function (error, treeData) {

so whole part of code looks like:

function load() {

    $.when($.getJSON('data/clinical.json'), $.getJSON('data/industry.json'))
        .then(function (a, b) {
            return $.extend(a[0], b[0]);
        })
        .then(function (data) {
           var json = JSON.stringify(data);
            console.log('['+ json +']');

// Get JSON data
    treeJSON = d3.json(json, function (error, treeData) {

the most interesting part is that console log self defined such as right string:

[{"text":"Alas","icon":"icons/tree.png","children":[{"text":"CDISC","children":[{"text":"SDTM","children":[{"text":"SDTM 3.1.1","icon":"icons/file.png"},{"text":"SDTM 3.1.3","icon":"icons/file.png"},{"text":"SDTM 3.2","icon":"icons/file.png"}]},{"text":"ADaM"},{"text":"CDASH"}]},{"text":"CDISC"},{"text":"BRIDG"}]}]

but I'm still getting an error:

GET http://localhost:63342/testMerg/%7B%22text%22:%22Alas%22,%22icon%22:%22…SH%22%7D]%7D,%7B%22text%22:%22CDISC%22%7D,%7B%22text%22:%22BRIDG%22%7D]%7D 404 (Not Found)

I've tried to use string method from some example which I found somewhere here:

      .then(function (data) {
           var json = JSON.stringify(data);

// Get JSON data
    treeData = JSON.parse( data );

but got an error

Uncaught SyntaxError: Unexpected token o

so I give up... could anybody help me?

Upvotes: 0

Views: 890

Answers (1)

Gilsha
Gilsha

Reputation: 14589

The problem arises because data is an Object and your trying to parse the object. But JSON.parse function expects a string as the parameter.

You can either directly assign treeData = data. (No need for parsing).

Or else you should try stringifying the object and then parse the stringified json.

var json = JSON.stringify(data);
treeData = JSON.parse(json);

var data = {"text":"Alas","icon":"icons/tree.png","children":[{"text":"CDISC","children":[{"text":"SDTM","children":[{"text":"SDTM 3.1.1","icon":"icons/file.png"},{"text":"SDTM 3.1.3","icon":"icons/file.png"},{"text":"SDTM 3.2","icon":"icons/file.png"}]},{"text":"ADaM"},{"text":"CDASH"}]},{"text":"CDISC"},{"text":"BRIDG"}]};

//treeData = data;

json = JSON.stringify(data);

console.log(JSON.parse(json));

Upvotes: 1

Related Questions