将数组转换为JSON

4

我有一个回调函数,在打印row时,会得到以下控制台输出

output of row [ 'Name', 'Language' ]
output of row [ 'English', 'Fr' ]
output of row [ 'German', 'Gr' ]
output of row [ 'France', 'London' ]

我希望将上述数组转换为有效的JSON,但排除第一行,结果如下。
{
  "English" : "Fr",
  "German" : "Gr",
  "France" : "London"
}

  .on('record', function(row, index){      
      console.log("output of row", row);
      var obj = {};
        row.forEach(function(column, index) {
          obj[row[index].trim()] = row[index].trim();
        })
        record.push(obj);
      }
    })

额外的代码

我正在获取CSV数据,每次将其推入一行。以下是CSV数据和每次读取CSV数据时获取的数组...

Language,Name
Fr,English
Gr,German
London,France

output of row [ 'Name', 'Language' ]
output of row [ 'English', 'Fr' ]
output of row [ 'German', 'Gr' ]
output of row [ 'France', 'London' ]

  cvcsv()
    .from.string(csv)
    .transform( function(row){
      row.unshift(row.pop());
      return row;
    })
    .on('record', function(row, index){
      console.log("output of row",row)

请说得更具体一些,哪段代码生成了这些行?此外,您是获取了一组行还是连续调用回调函数每次都会生成新的行? - Marco Bonelli
使用 stringify 函数:var myJsonString = JSON.stringify(yourArray); - manuerumx
@MarcoBonelli:每次调用回调函数时,我都会得到一个数组,该回调函数每次都会生成行。 - Shane
3个回答

2
假设您在连续调用生成行的 callback() 时得到了数组,您可以收集所需的行,将每一行解析为一个 "key": "value" 对,并将其添加到一个对象中。然后,您可以使用 JSON.stringify() 方法将您的对象转换为有效的 JSON 字符串。
以下是根据您提供的代码的可行解决方案:
var rows = {};

cvcsv().from.string(csv).transform(function(row){
    row.unshift(row.pop());
    return row;
}).on('record', function(row, index){    
    if (index > 0) rows[row[0]] = row[1];
});

jsonRows = JSON.stringify(rows);

// Log to the console to check
console.log(jsonRows);

结果将会像这样:
{"English" : "Fr", "German" : "Gr", "France" : "London"}

我不是很理解row = callback()这个东西,如果可以的话,你能给我一个fiddle吗?那就太好了。 - Shane
@Shane 你是如何精确获取这些行的?请提供更多代码,编辑你的回答。我正在创建一个可工作的代码片段。 - Marco Bonelli
@Shane,我更新了我的问题,请看看是否符合您的需求。 - Marco Bonelli

1
这里有一个简化的方法,可以帮助翻译一个数组,其中包含数组(大小为2)。
function addToObject(object, row, keyIndex, valueIndex) {
    object[row[keyIndex]] = row[valueIndex];
}

function test() {
    var data = [[ 'Name', 'Language' ],
                [ 'English', 'Fr' ],
                [ 'German', 'Gr' ],
                [ 'France', 'London' ]];
    var obj = {};

    for(var i = 1; i < data.length; i++)
        // NOTE data[i] can come from any place
        addToObject(obj, data[i], 0, 1);

    return obj;
}

OP 没有一个数组的数组。 - Marco Bonelli
@MarcoBonelli,数组是否存在并不重要,他们可以修改代码以适应自己的需求。测试方法是一个“测试”。 - That Guy

1
你可以使用JSON.stringify(yourArray)吗?
你可以使用shift方法从数组中删除第一个元素: yourArray.shift();

1
实际上,OP没有行数组。 - Marco Bonelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接