JSON.stringify(数组)用方括号括起来

Dev*_*con 7 javascript sqlite json node.js stringify

我正在尝试将一个数据数组插入到sqlite数据库的多个列中,我得到它几乎使用它:

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)+")");
  });
}
Run Code Online (Sandbox Code Playgroud)

我的数据构造如下:

//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;
};
Run Code Online (Sandbox Code Playgroud)

console.log输出INSERT INTO事件(标题,值,其他)VALUES(["newData",4,2]) 我只需要删除[]方括号(["newData",4,2]).我该怎么做?此外,如果有更好的方法将数据插入sqlite即时通知建议.谢谢

Dra*_*kes 23

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

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

dataString = dataArray.join(",");
Run Code Online (Sandbox Code Playgroud)

然后

["newData",4,2]
Run Code Online (Sandbox Code Playgroud)

"newData",4,2
Run Code Online (Sandbox Code Playgroud)

附录:请不要replace()手动尝试拔出括号,因为有一天括号会以字符串形式进入阵列.例如["Please see ref[1]",4,2]


S M*_*han 5

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

var strung = JSON.stringify(dataArray);
console.log(strung.substring(1,strung.length-1));
Run Code Online (Sandbox Code Playgroud)


Dev*_*con 5

感谢 Drakes 和 S McCrohan 的回答。我发现.replace(/]|[[]/g, '')附加到JSON.stringify(dataArray)

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

  • 对。如果您想采用正则表达式方法(这也是有效的),请尝试`/^\[|]$/g`,只匹配字符串的开头和结尾,避免更改任何内部元素。 (4认同)
  • 在未来的某个时刻,一个括号可能会潜入您的“dataArray”条目之一。已知会发生 (2认同)