javascript - JS : convert 2D object with keys to transposed csv

标签 javascript arrays csv object

我有一个返回 2D 对象的 ajax 调用,我希望能够将其转换为 .csv 文件以供用户下载。

PHP代码:echo json_encode($results);

js 函数现在有 console.log (JSON.parse(res)); 所以我可以验证内容。

控制台日志显示:

Object {color: Object, animal: Object}
  color: Object
    1: "red"
    2: "white"
    3: "blue"
  animal: Object
    1: "cat"
    2: "dog"
    3: "mouse  

每个内部对象始终具有相同数量的元素(在本例中为 3)

我想将其转换为 csv,然后下载。 csv 的第一行将包含外部对象键(颜色、动物),csv 最终将如下所示:

"color, animal"
"red, cat"
"white, dog"
"blue, mouse"

通过我看过的解决方案,他们将对象的连接版本附加到每一行。我需要垂直转置数据。

我认为我需要遍历每个内部对象(获取每个对象的第 n 个元素,获取每个对象的第 n+1 个元素等)并构建我自己的 csv 字符串,但这看起来非常笨重。

有什么漂亮的数组/对象函数可以帮助我吗?

我能够创建并下载 .csv 文件,只是这个数据转置逻辑让我陷入困境。

编辑:我没有尝试将 csv 字符串转换为数组,也没有尝试转置 2D 数组(它是一个 2D 对象)。

澄清 在对 php 文件的 ajax 调用中,我发送了一个从用户输入派生的 ["color", "animal"] 数组。 php 文件读取该数组并根据该数组收集数据。收集数据后,它会返回一个二维数组,内部数组是新数据。因此:

[color[red, white, blue], animal[cat,dog,mouse]]

最佳答案

你可以尝试这样的事情:

var rep = JSON.parse('{"color":{"1":"red","2":"white","3":"blue"},"animal":{"1":"cat","2":"dog","3":"mouse"}}')
function toCSV(jsonObject) {
  var csv = [];
  for (var i in jsonObject) {
    if (jsonObject.hasOwnProperty(i)) {
      var title = i.indexOf(' ')>-1? '"'+i+'"': i;
      csv[0] ? csv[0].push(title) : csv[0] = [title];
      var k = Object.keys(jsonObject[i]);
      for (var j = 0; j < k.length; j++) {
        var val = jsonObject[i][k[j]].indexOf(' ')>-1? '"'+jsonObject[i][k[j]]+'"': jsonObject[i][k[j]];;
        csv[j+1] ? csv[j + 1].push(val) : csv[j+1] = [val];
      }
    }
  }
  return csv.join('\n');
}

document.body.innerHTML = toCSV(rep).replace(/\n/g, '<br>');

关于javascript - JS : convert 2D object with keys to transposed csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31151525/

相关文章:

java - 从 .csv 中排除 header

php - 如何使用 Facebook API 获取好友的姓名

javascript - 如何从 javascript 调用带参数的 ajax 函数

php - PHP中目录结构的深度递归数组

python - 写入打开的 CSV 时跳过 header

python - 使用 pandas 从 csv 读取日期时间时出错

javascript - 如何通过一个类查找元素,但使用 JQuery 排除其他元素

javascript - .change 事件仅在第一次触发

arrays - Powershell:将一个数组添加为另一个数组的成员

c - 在 C 中声明字符串与整数的二维数组?