2015-04-19 73 views
4

我试图让一组数据插入到多个列中的SQLite数据库,我心中已经得到了它几乎与这方面的工作:JSON.stringify(数组)用方括号包围

function InsertData(dbData){ 
    var valueArray = [], dataArray = []; 
    var values = Object.keys(dbData); 
    for(var key in values){ 
    valueArray[valueArray.length] = values[key]; 
    dataArray[dataArray.length] = dbData[values[key]]; 
    } 
    console.log("INSERT INTO "+dbData.table+" ("+valueArray+") VALUES ("+JSON.stringify(dataArray)+")"); 
    dbData.database.serialize(function(){ 
    dbData.database.run("INSERT INTO "+dbData.table+" ("+valueArray+") VALUES ("+JSON.stringify(dataArray)+")"); 
    }); 
} 

我的数据被构造为如此:

//app.js 
function EventData(title, value, other){ 
    this.title = title; 
    this.value = value; 
    this.other = other; 
} 
EventData.prototype = new dbtools.DBData(usuevents, 'event'); 
var thisEventData = new EventData('newData', 4, 2); 

//dbtools.js 
DBData = function(database, table){ 
    this.database = database; 
    this.table = table; 
}; 

所述的console.log输出INSERT INTO事件(标题,值,其他)VALUES([ “newData”,4,2]) 我只需要在[]方括号删除([“newData “,4,2])。 我该怎么做?另外如果有更好的方法可以将数据插入到sqlite中,请打开建议。谢谢

+1

JSON不是SQL。你需要使用参数。 – SLaks

回答

15

JSON.stringify(dataArray)将始终返回方括号,因为dataArray是数组类型。相反,您可以将数组的每个元素串联起来,然后用逗号分隔它们。

dataArray = dataArray.map(function(e){ 
    return JSON.stringify(e); 
}); 

dataString = dataArray.join(","); 

然后

["newData",4,2] 

成为

"newData",4,2 

附录:请不要试图replace()出人工支架,因为这可能是一天一个支架进入你的阵列在一个字符串中。例如["Please see ref[1]",4,2]

2

德雷克的答案将是我个人的选择,因为代码清楚地表达了意图。但要展示一个替代方案:

var strung = JSON.stringify(dataArray); 
console.log(strung.substring(1,strung.length-1)); 
+0

看起来也不错。 – Drakes

2

感谢Drakes和S McCrohan为您解答。我发现,.replace(/]|[[]/g, '')追加到JSON.stringify(dataArray)

全线JSON.stringify(dataArray).replace(/]|[[]/g, '')

+1

有可能在将来的某个时候,一个括号可能会嵌入到你的一个'dataArray'条目中。据了解 – Drakes

+3

是正确的。如果你想采用正则表达式的方法(这也是有效的),试试'/^\ [|] $/g',只匹配字符串的开头和结尾,并且避免改变任何内部元素。 –