web-dev-qa-db-ja.com

角括弧で囲まれたJSON.stringify(array)

私は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)+")");
  });
}

私のデータは次のように構成されています:

//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 event(title、value、other)VALUES(["newData"、4,2]) [-]を削除するだけです([ "newData"、4,2])。どうすればいいですか?また、提案にオープンなSQLiteにデータを挿入するより良い方法がある場合。ありがとう

8
Devcon

dataArrayは配列型であるため、JSON.stringify(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]_

23
Drakes

DrakesとS McCrohanに回答いただきありがとうございます。 .replace(/]|[[]/g, '')JSON.stringify(dataArray)が追加されていることがわかりました

フルラインJSON.stringify(dataArray).replace(/]|[[]/g, '')

4
Devcon

コードが意図を明確に表しているので、ドレイクの答えは私の個人的な選択です。しかし、代替案を示すには:

var strung = JSON.stringify(dataArray);
console.log(strung.substring(1,strung.length-1));
4
S McCrohan