2017-05-17 7 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

あなたはそれを正しくしました。 –

答えて

0

JSON文字列を手動で作成しないでください。通常のオブジェクトをまとめて、JSON.stringifyを使用して変換します。あなたは、evalのでJSONに物事を変換しないあなたは `JSON.parse`を使用している場合strJSONはすでに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 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#mapを使用する1つの要素を取得し、Array#shift
  2. によって元の配列にそれを削除

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; 
} 
関連する問題