如何将node.js sqlite3记录集格式化为记录数组的JSON对象

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();

结果是一个对象数组,这有什么令人惊讶的吗? - Frederick Cheung
也许我正在使用错误的函数将其转换为JSON。我希望以我描述的格式查看结果。 - Brad Hein
再说一遍:这有什么令人惊讶的吗?你对JSON格式有很好的了解吗? - gustavohenke
更清晰地重新陈述问题 - Brad Hein
你所要求的输出不是有效的 JSON。 - Frederick Cheung
1个回答

2
根据我的了解,JSON格式的整个记录集应该被大括号包围,每个记录应该用方括号括起来。但是我看到的情况是相反的。
不,你弄错了。数据库结果将被建模为对象数组——一个数组代表整个查询的结果,数组中的每个对象代表单个结果记录。在JSON中,数组使用方括号,对象使用大括号(与实际的JavaScript代码相同)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接