javascript和python返回的相同数据结构在d3.js中表现不同

Same data structure returned from javascript and python behaves differently in d3.js

本文关键字:js d3 数据结构 python 返回 javascript      更新时间:2024-04-12

当我使用javascript源文件中的数据结构时:

var data = [{'x': 100, 'y': '65'}, 
  {'x': 122, 'y': '57'}, 
  {'x': 144, 'y': '101'}, 
  {'x': 166, 'y': '87'}, 
  {'x': 188, 'y': '8'}, 
  {'x': 210, 'y': '180'}, 
  {'x': 232, 'y': '132'}, 
  {'x': 257, 'y': '190'}, 
  {'x': 276, 'y': '210'}, 
  {'x': 298, 'y': '150'}]

alert我的主文件中的数据,它显示:

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

它也适用于:

alert(d3.max(data,function(d) { return d.count;}))

但是当我使用python作为源文件并返回以下内容时:

 data = [{'x': 100, 'y': '65'}, 
  {'x': 122, 'y': '57'}, 
  {'x': 144, 'y': '101'}, 
  {'x': 166, 'y': '87'}, 
  {'x': 188, 'y': '8'}, 
  {'x': 210, 'y': '180'}, 
  {'x': 232, 'y': '132'}, 
  {'x': 257, 'y': '190'}, 
  {'x': 276, 'y': '210'}, 
  {'x': 298, 'y': '150'}]
abc=json.dumps(data)
print data

警报也显示相同:

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

但这不起作用:

alert(d3.max(data,function(d) { return d.count;}))

这是我的全部代码

function add_py()
{
 var count = $( "#count" ).val();
    $.ajax({
        type: "get",
        url: "abc.py",
        data: {'count': count},
        datatype:"script",
        async: false,
        success: function(response) {
        var data= JSON.parse(response);
        showGraph(data);
        }, // success closed
        error:function(xhr,err)
        {
            alert("Error connecting to server, please contact system administator.");
        }
    })//ajax closed
}

function  showGraph(de)  {
  alert(de) 
  var mySVG = d3.select("body").append("svg");
  mySVG 
.attr("width", 500) 
.attr("height", 500);
  var heightScale = d3.scale.linear()
.domain([0, 963])
.range([0, 400]);
  alert(d3.max(de,function(d) { return d.count;}))
  var heightScale = d3.scale.linear()
  .domain([0, d3.max(de,function(d) { return d.count;})])
  .range([0, 400]);
  var myBars = mySVG.selectAll('circle')
.data(de)
.enter()
.append('svg:circle');
  myBars
.attr('r',20);
  myBars
.attr('cx',function(d,i) {return (i * 22) + 100;})
.attr('cy',function(d,i) {return 400 - heightScale(d.count);});
  }

我知道js和python文件中的数据可能表现不同,但如何使python数据像js数据一样工作。提前谢谢。

我不知道你是如何混合JavaScript和Python的,我只是假设你试图将data对象作为字符串从Python程序加载(也许是通过服务器?)。在这种情况下,您需要解析字符串,并通过以下操作将其转换为JSON对象(即内部JavaScript对象):

data = JSON.parse(data)

在您的主文件中。

EDIT:还要确保你的Python程序将你的字典输出为有效的JSON格式,只是print如果它不起作用,你需要类似json.dumps(data)的东西。