D3JsDay08做为视觉化图表的燃料,从网路撷取档案的资料—fetch Data

浅谈原始码

D3包装了Javascript的fetchAPI来撷取资料我们这里可以看到D3Js的原始码为以下片段,不难看出它是return了fetchAPI

function json(input, init) {
  return fetch(input, init).then(responseJson);
}

另外也可以参见d3原始码的部分

function dsv(delimiter, input, init, row) {
  if (arguments.length === 3 && typeof init === "function") row = init, init = undefined;
  var format = d3Dsv.dsvFormat(delimiter);
  return text(input, init).then(function(response) {
    return format.parse(response, row);
  });
}

从中可以理解如果没有带入init物件参数而且第二个参数是function就会当作是转换函式

dsv的API reference说明文件下方有写到

https://ithelp.ithome.com.tw/upload/images/20210923/20125095udHygEwbnW.png

参见d3.dsv API reference

常见的撷取元素

这边以常见的撷取档案来做简单说明

函式 说明
d3.text(input[, init]) 撷取txt档案,并解析为UTF-8的编码字串
d3.json(input[, init]) 撷取JSON档案并且解析之後放入物件中
d3.csv(input[, init][, row]) 撷取资源最後一个带入的参数可以设定选用转换函式
d3.dsv(delimiter, input[, init][, row]) 传入一个分隔符号,最後的参数可以带入转换函式
d3.image(input[, init]) 撷取资源後解析成为HTML的img元素
d3.html(input[, init]) 撷取资源後解析成为HTMLDocument的元素

其他可以fetch的资料参见官方API说明

d3-fetchAPI官方文件

撷取资料

以下就D3来获取资料,需要注意的地方是由於是开启URL因此必须使用服务器的方式请求你的档案,例如Visual Studio Code的套件LiveServer或者使用Apache开启服务器
撷取资料方法如下

撷取JSON档案

const data = d3.json("populationDensity.json");
  data.then((data) => {
      console.log(data);
      return data;
  });

另外也可以支援使用async await的方式使用,这边接一个立即函式(IIFE)来执行它

const fn = async function (){
  const data = await d3.json("populationDensity.json");
  await console.log(data);
}();

撷取CSV档案

程序码如下

const data = d3.csv("populationDensity.csv");
data.then((data)=>{
    console.log(data);
})

我们可以看到它会回传一个阵列形式如下图

https://ithelp.ithome.com.tw/upload/images/20210923/20125095fDyqvGYNVM.png

因此也可以使用console.table来观看
程序码如下

const data = d3.csv("populationDensity.csv");
data.then((data)=>{
    console.table(data);
})

结果就会如下图呈现表格的形式了

https://ithelp.ithome.com.tw/upload/images/20210923/20125095YYMVmPfnzY.png

撷取html

程序码如下

const data = d3.html("hello.html");
data.then((data)=>{
    console.log(data);
})

可以发现它会自动解析成HTMLElement

撷取image

程序码如下

const data = d3.image("test.jpg");
data.then((data)=>{
    console.log(data);
})

这里可以发现它会自动解析成HTMLimg元素

https://ithelp.ithome.com.tw/upload/images/20210923/20125095dYS18kAdwO.png

如果对於Fetchinit参数有兴趣的话可以看制定HTML标准的协会所写的spec

Fetch Standard

另外也可以参考MDN的说明文件

MDN的fetchAPI

以上介绍比较常见的撷取资料格式,接下来将会提到资料绑定的部分。


<<:  DAY03 - 到github放置play

>>:  D22-(9/22)-长荣航(2618)-差了一个字,就是涨倍和涨十倍的差别

Day 18 | 万年范例-TodoList

没错又是万年的demo作品- TodoList 今天我们先来做最最最阳春的TodoList,只先做简...

【在 iOS 开发路上的大小事-Day07】除了用 WKWebView 以外,还可以如何在 App 中显示 PDF 档案呢?

前情提要 一般我们要在 App 中显示 PDF 档案,可能会透过 WKWebView 来进行实作 最...

[NestJS 带你飞!] DAY07 - Provider (下)

汇出自订 Provider 在介绍共享模组的时候,有提到可以透过 Module 的 exports ...

Day 13 - 物品借用纪录系统 (3) 程序码解说

今天主要是来补足 Day11 和 Day12 简(ㄏㄨㄚˊ)约(ㄕㄨㄟˇ)的部分。 我们会讲两个东西...

Day 23 - Promise

Promise 解决了回调地狱,在处理一些需要花费比较长时间的任务时使用 Promise 就可以进行...