【问题标题】:Convert json to csv with js用js将json转成csv
【发布时间】:2020-09-02 05:39:22
【问题描述】:

我需要将我的 JSON 转换为 CSV 文件,但我不知道如何正确操作。

我已经有了这个代码

      let rows = typeof objArray !== "object" ? JSON.parse(objArray) : objArray;
      let header = "";
      Object.keys(rows[0]).map(pr => (header += pr + ";"));

      let str = "";
      rows.forEach(row => {
        let line = "";
        let columns =
          typeof row !== "object" ? JSON.parse(row) : Object.values(row);

        columns.forEach(column => {
          if (line !== "") {
            line += ";";
          }
          if (typeof column === "object") {
            line += JSON.stringify(column);
          } else {
            line += column;
          }
        });
        str += line + "\r\n";
      });
      return header + "\r\n" + str;

但我希望得到与现在不同的结果

wrong result

我需要这个expected result

  function ConvertToCSV(objArray) {
      let rows = typeof objArray !== "object" ? JSON.parse(objArray) : objArray;
      let header = "";
      Object.keys(rows[0]).map(pr => (header += pr + ";"));

      let str = "";
      rows.forEach(row => {
        let line = "";
        let columns =
          typeof row !== "object" ? JSON.parse(row) : Object.values(row);

        columns.forEach(column => {
          if (line !== "") {
            line += ";";
          }
          if (typeof column === "object") {
            line += JSON.stringify(column);
          } else {
            line += column;
          }
        });
        str += line + "\r\n";
      });
      return header + "\r\n" + str;
  }
  
  function downloadCSV () {
    let data = [{"am":{"a3":2,"a1":5,"a2":2},"zul":{"mer":1,"spi":1,"aut":1,"inf2":1,"int":1,"infl":1,"les":1},"kaab":      {"ka11":6,"ka12":6,"ka10":6},"kg3":"fdsf","ges":1,"alt":3,"kawe":{"ka9":4,"ka7":5,"ka8":5},"kaak":{"ka2":4,"ka3":5,"ka4":5,"ka1":4,"ka5":3,"ka6":5},"kg4":2,"kg1":5,"eink":"","kg2":4,"soz2":"","solz":"2","ae":{"a6":2,"a5":2,"a4":6}}]
    
    let result = ConvertToCSV(data);
    
    let fileToSave = new Blob([result], {
       type: "csv",
       name: 'data.csv
     });

     saveAs(fileToSave, 'data.csv);
  }
  
<script src="https://cdn.jsdelivr.net/npm/file-saver@2.0.2/dist/FileSaver.min.js"></script>
<button onclick="downloadCSV">download csv</button>

【问题讨论】:

    标签: javascript json csv export-to-csv


    【解决方案1】:

    你可以试试这个

    function downloadCSV () {
    
        let arr = [{"am":{"a3":2,"a1":5,"a2":2},"zul":{"mer":1,"spi":1,"aut":1,"inf2":1,"int":1,"infl":1,"les":1},"kaab":      {"ka11":6,"ka12":6,"ka10":6},"kg3":"fdsf","ges":1,"alt":3,"kawe":{"ka9":4,"ka7":5,"ka8":5},"kaak":{"ka2":4,"ka3":5,"ka4":5,"ka1":4,"ka5":3,"ka6":5},"kg4":2,"kg1":5,"eink":"","kg2":4,"soz2":"","solz":"2","ae":{"a6":2,"a5":2,"a4":6}},
     {"am":{"a3":2,"a1":5,"a2":2},"zul":{"mer":1,"spi":1,"aut":1,"inf2":1,"int":1,"infl":1,"les":1},"kaab":      {"ka11":6,"ka12":6,"ka10":6},"kg3":"fdsf","ges":1,"alt":3,"kawe":{"ka9":4,"ka7":5,"ka8":5},"kaak":{"ka2":4,"ka3":5,"ka4":5,"ka1":4,"ka5":3,"ka6":5},"kg4":2,"kg1":5,"eink":"","kg2":4,"soz2":"","solz":"2","ae":{"a6":2,"a5":2,"a4":6}}   
        ];
      
        var keys = [];
        var values = [];
        function getKeys(data, k = '') {
          for (var i in data) {
            var rest = k.length ? '_' + i : i
            if (typeof data[i] == 'object') {
              if (!Array.isArray(data[i])) {
                getKeys(data[i], k + rest)
              }
            } else keys.push( k+ rest)
          }
        }   
        function getValues(data, k = '') {
          for (var i in data) {
            var rest = k.length ? '' + i : i
            if (typeof data[i] == 'object') {
              if (!Array.isArray(data[i])) {
                getValues(data[i], k + rest)
              }
            }
            else values.push(data[rest])
          }
        }
    
        getKeys(arr[0])
        var value="";
        arr.forEach(x=>{
           values=[];
           getValues(x);
           value+=values.join(";")+"\r\n";
        })
        
        let result = keys.join(";")+"\r\n"+value;
        let fileToSave = new Blob([result], {
           type: "csv",
           name: 'data.csv'
         });
            
        saveAs(fileToSave, 'data.csv');
      }
    <script src="https://cdn.jsdelivr.net/npm/file-saver@2.0.2/dist/FileSaver.min.js"></script>
    <button onclick="downloadCSV()">download csv</button>

    【讨论】:

    • 这看起来好多了。谢谢
    • 但是所有数据都在一行中,这是个问题
    • 我需要在 excel 文件中为每个主要对象保留一行
    • 我需要为每个对象保留一行所以如果在 let arr= [{}, {}, {}] 内还有更多对象
    • 是的,那更好。但最后一件事:
    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2015-08-23
    • 2016-07-27
    相关资源
    最近更新 更多