2015-04-19 49 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',只匹配字符串的開頭和結尾,並且避免改變任何內部元素。 –