【问题标题】:How convert tsv to Json如何将 tsv 转换为 Json
【发布时间】:2013-06-24 12:22:45
【问题描述】:

我想基于 json 文件制作动态图。我看过很多 tsv 的例子,但我不知道如何将它转换为 json。 那是我想从 tsv 更改为 json 的部分,但我不知道如何!

d3.tsv("data/data.tsv", function(error, data) {
  data.forEach(function(d) {
    d.date = parseDate(d.date);
    d.close = +d.close;
  });

当我使用时

d3.json("data/data.json", function(data) {
    data.forEach(function d) { 
        d.date = parseDate(d.date);
        d.close = +d.close;
    }

});

它给出了这个错误:未捕获的类型错误:无法调用未定义的方法'forEach'!

感谢您的建议:)

【问题讨论】:

标签: json dynamic graph d3.js


【解决方案1】:

尝试做这样的事情

d3.json("data/data.json", function(data) {
    data.forEach(function d) { 
        d.date = parseDate(d.date);
        d.close = +d.close;
    }
});

d3.js 支持 json,https://github.com/mbostock/d3/wiki/Requests

【讨论】:

  • 感谢您的回答,当我使用您的代码时,它会给出以下错误:未捕获的类型错误:无法调用未定义的方法 'forEach'!
  • 如果可以的话,请尝试使用 for
【解决方案2】:

forEach 周围的语法有点不对;试试这个:

d3.json("data/data.json", function(data) {
    data.forEach(function(d) { 
        d.date = parseDate(d.date);
        d.close = +d.close;
    });
});

(正如 Felix 指出的那样,这仅在您的 JSON 对象已定义并且是一个数组时才有效)

【讨论】:

    【解决方案3】:

    这里有一个小代码,您可以在其中将 tsv 转换为 json。它可以帮助你...

    ps : 这里是 typescript,但你可以很容易地将它转换成 vanilla javascript ;)

    // Set bunch of datas into format object
    tsvToJson(datas: string): Array<Object>{
        // Separate each lines
        let array_datas = datas.split(/\r\n|\r|\n/g);
    
        // Separate each values into each lines
        var detailed_datas = [];
        for(var i = 0; i < array_datas.length; i++){
            detailed_datas.push(array_datas[i].split("\t"));
        }
    
        // Create index
        var index = [];
        var last_index = ""; // If the index we're reading is equal to "", it mean it might be an array so we take the last index
        for(var i = 0; i < detailed_datas[0].length; i++){
            if(detailed_datas[0][i] == "") index.push(last_index);
            else {
                index.push(detailed_datas[0][i]);
                last_index = detailed_datas[0][i];
            }
        }
    
        // Separate data from index
        detailed_datas.splice(0, 1);
    
        // Format data
        var formated_datas = [];
        for(var i = 0; i < detailed_datas.length; i++){
            var row = {};
            for(var j = 0; j < detailed_datas[i].length; j++){
                // Check if value is empty
                if(detailed_datas[i][j] != ""){
                    if(typeof row[index[j]] == "object"){
                        // it's already set as an array
                        row[index[j]].push(detailed_datas[i][j]);
                    } else if(row[index[j]] != undefined){
                        // Already have a value, so it might be an array
                        row[index[j]] = [row[index[j]], detailed_datas[i][j]];
                    } else {
                        // It's empty for now, so let's say first that it's a string
                        row[index[j]] = detailed_datas[i][j];
                    }
                }
            }
            formated_datas.push(row);
        }
        console.log(formated_datas); // @TODO : remove this
        return formated_datas;
    }
    

    【讨论】:

      【解决方案4】:

      我转译并恢复 Wetteren 的代码:

      convertTSVtoJSON(tsvData) {
          const formattedData = tsvData.split(/\r\n|\r|\n/g).filter(e => !!e).map((parsedEntry) => parsedEntry.split("\t"));
          const tsvHeaders = formattedData.shift();
      
          return formattedData.map(formattedEntry => {
              {
                  return tsvHeaders.reduce((jsonObject, heading, position) => {
                      jsonObject[heading] = formattedEntry[position];
                      return jsonObject;
                  }, {});
              }
          });
      }
      

      【讨论】:

        猜你喜欢
        • 2021-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-06
        • 1970-01-01
        • 2014-12-29
        • 1970-01-01
        相关资源
        最近更新 更多