为什么我的JSON文件包含[object Object]?

时间:2018-10-23 11:36:19

标签: javascript sql node.js sqlite

我正在使用sqlite3和nodeJS,并查询数据库。我想将查询复制到json文件中。我遇到了具有字符串和对象的json文件的问题。为什么我的JSON文件包含:

[object Object]

这是我的代码:

db.all(sql, [], (err, rows) => {
if(err) { 
  throw err; 
  }rows.forEach((row) => {
      arr_string = JSON.parse(JSON.stringify(row));
      fs.writeFile("tempo.json", arr_string, function(err){
    });

      console.log(arr_string);
  });
});

我最终希望对这些条目使用ajax请求。

5 个答案:

答案 0 :(得分:2)

我认为在将JSON数据存储到SQLite时,您并没有对其进行字符串化。如果您将JSON数据直接存储到SQLite中,它将以[object Object]格式存储。我的建议是在存储在SQLite中的同时对数据进行字符串化处理。并且在检索时仅解析它。这样您的问题就会解决。

答案 1 :(得分:0)

arr_string实际上不是字符串,因为您对其进行了JSON.parse解析。删除JSON.parse呼叫。

答案 2 :(得分:0)

arr_string = JSON.parse(JSON.stringify(row));
           //^---------^--- This is parsing the string back to a new object.

您正在将字符串化的项目解析为新的Object,因此node.js文件编写器试图将对象写入写流,从而将其解释为[object Object]

只需省略JSON.parse,以使流有效地成为 string 实例:

arr_string = JSON.stringify(row);

此外,您应该汇总结果并将其只写入一次,或者附加到文件中:

db.all(sql, [], (err, rows) => {
if(err) { 
  throw err; 
  }
  let _strings = [];
  const newline_separator = ''; // <-- use whatever separator you need.
  rows.forEach((row) => {
      arr_string = JSON.stringify(row);
      console.log(arr_string);
      _strings.push(arr_string);
  });
  fs.writeFile("tempo.json", _strings.join(newline_separator), function(err){});
});

由于它是json,所以建议您为我们提供更精确的输入,以便我们可以猜测预期的结果。

答案 3 :(得分:0)

JSON.stringify()方法将JavaScript值转换为JSON字符串

arr_string = JSON.stringify(row);

“现在这样做的问题是,JSON文件仅写入最后一行(我查询了4行),而且我无法调用arr_string.caphi,因为它不再是对象了”

Create an empty array(list) and push each result of query in array.And then 
finally convert it into JSON.

示例代码:

var rows=[{"holla":"bolla"},{"holla":"bolla1"}];
console.log(JSON.stringify(rows));

答案 4 :(得分:0)

JSON.stringify()使用JSON对象并返回String
JSON.parse()接受String并返回JSON对象

尝试:

rows.forEach((row) => {
  arr_string = JSON.stringify(row); // 'row' data is converted to String
  fs.writeFile("tempo.json", arr_string, function(err){
});`