javascript - 在 D3.js 中使用的 JSON 文件格式

标签 javascript json d3.js

我在理解如何以 JSON 格式设置日期和时间格式时遇到问题。
我正在尝试在 D3.js 代码段中使用该文件> 代码。感谢您的任何解释,因为我是 JSON 的新手,并且对 D3 也比较陌生。

[
  {"BeaconMac":"Office","UserMac":"22", "Date": "3.6.2015", "Time":"8:09"},
  {"BeaconMac":"Office","UserMac":"42", "Date": "3.6.2015", "Time": "8:10"},
  {"BeaconMac":"TreatmentRoom","UserMac:":"60", "Date": "3.6.2015", "Time":"8:11"}
]

这是我正在实现的代码。当我运行它时它没有显示任何内容。

<!--
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>Hello world</p>
</body>
</html>-->
<!DOCTYPE html>
<html lang="en">

<head>
    <title>D3 Tutorial</title>
    <!--let browser know where to find library-->
    <script src = "http://d3js.org/d3.v3.min.js"></script>
</head>


<body>

<script>

    d3.json("data.json", function(data){

        var canvas = d3.select("body").append("svg")
                .attr("width", 500)
                .attr("height", 500);

        canvas.selectAll("rect")
                .data(data)
                .enter()
                    .append("rect")
                    .attr("width", function(d){return d.Time * 10;})
                    .attr("height", 48)
                    .attr("y", function(d, i){return d.Date * 50;})
                    .attr("fill", "blue");
        /*canvas.selectAll("text")
                .data(data)
                .enter()
                .append("text")
                .attr("fill","white")
                .attr("y", function(d,i){return i * 50;})
                .text(function(d){return d.name + 24;})*/
    })

</script>




</body>

</html>

最佳答案

您是正确的,日期需要在可用之前进行处理,因为它们目前是字符串形式。因此,您需要创建日期对象或者可能是数字。因此,对于初学者来说,您需要循环数据,以便可以访问和修改每个日期。加载数据后即可执行此操作:

d3.json("data.json", function(data){
  data.forEach(function(d) {
    // Here d is an entry in the data array
    console.log(d.Date); // logs "3.6.2015" 3 times

    // Now do something with d.Date...
  });

问题是要做什么,这在某种程度上取决于您如何需要这些数据。但您可能想要创建 Date 对象,相当于调用 new Date(2015, 2, 6)

D3 具有方便的函数,可以将字符串格式化和/或解析为 Date 对象。例如:

var formatter = d3.time.format("%m.%d.%Y")

formatter 现在是一个函数,如果您使用日期对象调用它,例如 formatter(new Date()) 将返回一个字符串,例如“02.10. 2015”。您可以阅读有关如何使用 d3 API reference 中的 % 字符指定该格式的更多信息。 .

但是,您需要执行与上面示例相反的操作;您想要将格式化字符串转换为日期对象。使用 formatter 函数也是可能的:

formatter.parse("2.6.2015")

这将返回一个设置为 2015 年 2 月 6 日的 Date 对象。

把它们放在一起,从一开始的循环看起来像这样:

d3.json("data.json", function(data) {
  var formatter = d3.time.format("%m.%d.%Y");
  data.forEach(function(d) {
    d.Date = formatter.parse(d.Date);
  });
})

关于javascript - 在 D3.js 中使用的 JSON 文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35324577/

相关文章:

javascript - 如何让 React 项目中的 Emotion 风格的组件与 TypeScript 一起工作?

java改变变量参数值

javascript - D3-Tile 并非所有 Tile 都加载

php - 当if条件满足时隐藏div标签

javascript初始化对象属性

javascript - 对抗 Visual Studio 2008 中可疑的 JavaScript IntelliSense 支持

javascript - 创建实时价格计算表格

jQuery 似乎没有自动解析 JSON

javascript - D3 - 当悬停从同一数据条目的不同属性创建的圆形元素时,如何显示/隐藏文本元素?

javascript - 使用 D3.js 的实时图表