2017-05-17 192 views
0

我正在处理将表数组转换为JSON的函数,这是我的代码。我检查过strJSON是我想要的JSON格式,但它是一个字符串而不是一个JSON对象。当我尝试使用“eval”将其转换为JSON时,会出现一条错误消息,提示“Darren未定义”。我不知道发生了什么事。将表数组转换为JSON对象

var myArray=[["Name","Age","Gender"],["Darren",31,"Male"],["Gakki",25,"Female"]]; 

//expected output 
var myJSON=[{"Name":"Darren","Age":31,"Gender":"Male"},{"Name":"Gakki","Age":25,"Gender":"Female"}]; 

function convertJSON(tableData){ 
    var objJSON=[]; 
    var strJSON=[]; 
    tableData.forEach(function(rowData,i){ 
     if (i==0){ 
      rowData.forEach(function(cellData){ 
       head.push(cellData); 
      }); 
     } 
     else{ 
      var objData=[]; 
      var objEntry=[]; 
      rowData.forEach(function(cellData,j){ 
       objData=head[j] + ":" + cellData; 
       objEntry.push(objData); 
      }); 
      strJSON.push("{" + objEntry + "}"); 
     } 
    }); 
    objJSON=eval("[" + strJSON + "]"); 
    return objJSON 
} 
+0

你没有的东西转换成JSON与EVAL,你可以使用'JSON.parse',你甚至都不需要做,在这一点,因为strJSON将JSON如果已经你做得对。 –

回答

0

不要尝试手动创建JSON字符串。把一个普通物体放在一起,并用JSON.stringify进行转换。

var myArray=[["Name","Age","Gender"],["Darren",31,"Male"],["Gakki",25,"Female"]]; 
 

 
//expected output 
 
var myJSON=[{"Name":"Darren","Age":31,"Gender":"Male"},{"Name":"Gakki","Age":25,"Gender":"Female"}]; 
 

 
function convertJSON(tableData){ 
 
    var keys = tableData[0], 
 
     objects = []; 
 
     
 
    for(var i = 1; i < tableData.length; i++){ 
 
     var rowObject = {}; 
 
     tableData[i].forEach(function(item, index){ 
 
      rowObject[keys[index]] = item; 
 
     }); 
 
     objects.push(rowObject); 
 
    } 
 
    
 
    return JSON.stringify(objects); 
 
} 
 

 
document.write(convertJSON(myArray));

+0

myArray在shift()后被修改,如何保持它不变? – mogcai

+0

我编辑了代码,因此它不需要调用'shift()',并保持原始数组完好无损。 – AndrewR

2
  1. 送一种元素和Array#shift
  2. 删除原阵列然后使用Array#map建立自己的期望导致

var myArray=[["Name","Age","Gender"],["Darren",31,"Male"],["Gakki",25,"Female"]]; 
 

 
var properties = myArray.shift(); 
 

 
var result = myArray.map(a => { 
 
    var newObj = {}; 
 
    properties.forEach ((p, idx) => { 
 
    newObj[p] = a[idx]; 
 
    }); 
 
    return newObj; 
 
}) 
 

 
console.log(result);

0
function html2json() { 
    var json = '{'; 
    var otArr = []; 
    var tbl2 = $('#dest_table tr').each(function(i) {   
     x = $(this).children(); 
     var itArr = []; 
     x.each(function() { 
     itArr.push('"' + $(this).text() + '"'); 
     }); 
     otArr.push('"' + i + '": [' + itArr.join(',') + ']'); 
    }) 
    json += otArr.join(",") + '}' 

    return json; 
}