3

我想将我的查询结果格式化为单个 JSON 对象,其中包含每个记录的数组对象。虽然需要帮助编写脚本 - 该JSON.stringify函数正在构建一个对象数组(我的 JSON 由内而外!)。

我总是可以编写一个函数来手动构建 JSON,但我觉得已经有一个函数可以做我正在寻找的事情。我就是找不到。

我想得到的 JSON 字符串:

{["id":1,"info":"Ipsum 0"], ["id":2,"info":"Ipsum 1"], 
["id":3,"info":"Ipsum 2"], ["id":4,"info":"Ipsum 3"] (and so on) }

实际结果

[{"id":1,"info":"Ipsum 0"},{"id":2,"info":"Ipsum 1"},
{"id":3,"info":"Ipsum 2"},{"id":4,"info":"Ipsum 3"},
{"id":5,"info":"Ipsum 4"},{"id":6,"info":"Ipsum 5"},
{"id":7,"info":"Ipsum 6"},{"id":8,"info":"Ipsum 7"},
{"id":9,"info":"Ipsum 8"},{"id":10,"info":"Ipsum 9"}]

到目前为止我的代码(基于这个例子

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(':memory:');

db.serialize(function() {
  db.run("CREATE TABLE lorem (info TEXT)");

  var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
  for (var i = 0; i < 10; i++) {
      stmt.run("Ipsum " + i);
  }
  stmt.finalize();

  var sql = "SELECT rowid AS id, info FROM lorem";

   // Print the records as JSON
    db.all(sql, function(err, rows) {
      console.log(JSON.stringify(rows));
    });

});

db.close();
4

1 回答 1

2

根据我对 JSON 的了解,我希望整个记录集都用大括号括起来,每条记录都用方括号括起来。但是我看到相反的情况。

不,你把它弄反了。数据库结果将被建模为对象数组 - 1 个数组代表整个查询的结果,该数组中的每个对象代表一个结果记录。在 JSON 中,数组使用方括号,对象使用花括号(与实际的 JavaScript 代码相同)。

于 2013-07-18T19:06:22.687 回答