如何从只出现在 console.log() 但不出现在 JSON.stringify() 中的 JavaScript 对象中获取 属性?
How to get property out of JavaScript object which is only appearing in console.log() but not in JSON.stringify()?
我从我的 SQLite 数据库中得到一个错误对象。当我用 console.log(err)
显示它时,我得到:
{ records: { Error: SQLITE_ERROR: no such table: showcaseUsers errno:
1, code: 'SQLITE_ERROR' } }
然而,当我用 JSON.stringify(err)
显示它时,我只得到:
{"records":{"errno":1,"code":"SQLITE_ERROR"}}
我想在字符串中获取错误消息 no such table: showcaseUsers
。
我找到的唯一方法是:
const errorText = console.log(data);
但是这样也会把数据输出到控制台,这是不可取的。
我如何 (1) 停止 console.log 将其内容输出到控制台,或者 (2) 以其他方式获取字符串中的错误消息?
注意:此时我在 Node 中而不是在浏览器中,因此 Capturing javascript console.log? 的答案似乎没有帮助。
问题格式错误 JSON,必须是 key:value
对。如果 key:value
中的 value
是字符串,则应将其括在单引号或双引号中。
{ records: { Error: SQLITE_ERROR: no such table: showcaseUsers errno: 1, code: 'SQLITE_ERROR' } }
在没有适当的 value
的情况下(value
在你的情况下有数据类型 String
),JSON.stringify(err)
试图将它强制为 JSON 基于冒号 :
作为 key
和 value
之间的分隔符。 Available datatypes in JavaScript
此处更正,我刚刚用双引号将其括起来,并对其进行了格式化(格式化是可选的,有助于易读性)。
{
records: {
Error: "SQLITE_ERROR: no such table: showcaseUsers errno: 1, code: 'SQLITE_ERROR'"
}
}
实际上应该像这样格式化(参见单引号的位置)
{
records: {
Error: 'SQLITE_ERROR: no such table: showcaseUsers',
errno: 1,
code: 'SQLITE_ERROR'
}
}
更新: 首先必须在数据库中存储正确格式的数据。如果您错过了它,那么您只能手动解析从 SQLite 获取的数据。
有用的资源
- How to store JSON object in SQLite database
- Use the new JSON extension for SQLite with Python
- Library to query JSON1, FTS3, and FTS4 fields in Android
根本不需要截取 console
- 您会在 err.message
中找到完整的错误消息,尽管它仍然以“SQLITE_ERROR:
”为前缀
它是 Error
对象的不可枚举 属性,因此它没有出现在 JSON 输出中的原因:
let sqlite3 = require('sqlite3');
let db = new sqlite3.Database(':memory:');
db.run("UPDATE foo SET bar = 1", (err, res) => {
console.log(Object.getOwnPropertyDescriptors(err));
console.log(err.message);
});
输出:
{ stack:
{ value: 'Error: SQLITE_ERROR: no such table: foo',
writable: true,
enumerable: false,
configurable: true },
message:
{ value: 'SQLITE_ERROR: no such table: foo',
writable: true,
enumerable: false, <<---------
configurable: true },
errno:
{ value: 1, writable: true, enumerable: true, configurable: true },
code:
{ value: 'SQLITE_ERROR',
writable: true,
enumerable: true,
configurable: true } }
SQLITE_ERROR: no such table: foo
我从我的 SQLite 数据库中得到一个错误对象。当我用 console.log(err)
显示它时,我得到:
{ records: { Error: SQLITE_ERROR: no such table: showcaseUsers errno: 1, code: 'SQLITE_ERROR' } }
然而,当我用 JSON.stringify(err)
显示它时,我只得到:
{"records":{"errno":1,"code":"SQLITE_ERROR"}}
我想在字符串中获取错误消息 no such table: showcaseUsers
。
我找到的唯一方法是:
const errorText = console.log(data);
但是这样也会把数据输出到控制台,这是不可取的。
我如何 (1) 停止 console.log 将其内容输出到控制台,或者 (2) 以其他方式获取字符串中的错误消息?
注意:此时我在 Node 中而不是在浏览器中,因此 Capturing javascript console.log? 的答案似乎没有帮助。
问题格式错误 JSON,必须是 key:value
对。如果 key:value
中的 value
是字符串,则应将其括在单引号或双引号中。
{ records: { Error: SQLITE_ERROR: no such table: showcaseUsers errno: 1, code: 'SQLITE_ERROR' } }
在没有适当的 value
的情况下(value
在你的情况下有数据类型 String
),JSON.stringify(err)
试图将它强制为 JSON 基于冒号 :
作为 key
和 value
之间的分隔符。 Available datatypes in JavaScript
此处更正,我刚刚用双引号将其括起来,并对其进行了格式化(格式化是可选的,有助于易读性)。
{
records: {
Error: "SQLITE_ERROR: no such table: showcaseUsers errno: 1, code: 'SQLITE_ERROR'"
}
}
实际上应该像这样格式化(参见单引号的位置)
{
records: {
Error: 'SQLITE_ERROR: no such table: showcaseUsers',
errno: 1,
code: 'SQLITE_ERROR'
}
}
更新: 首先必须在数据库中存储正确格式的数据。如果您错过了它,那么您只能手动解析从 SQLite 获取的数据。
有用的资源
- How to store JSON object in SQLite database
- Use the new JSON extension for SQLite with Python
- Library to query JSON1, FTS3, and FTS4 fields in Android
根本不需要截取 console
- 您会在 err.message
中找到完整的错误消息,尽管它仍然以“SQLITE_ERROR:
”为前缀
它是 Error
对象的不可枚举 属性,因此它没有出现在 JSON 输出中的原因:
let sqlite3 = require('sqlite3');
let db = new sqlite3.Database(':memory:');
db.run("UPDATE foo SET bar = 1", (err, res) => {
console.log(Object.getOwnPropertyDescriptors(err));
console.log(err.message);
});
输出:
{ stack:
{ value: 'Error: SQLITE_ERROR: no such table: foo',
writable: true,
enumerable: false,
configurable: true },
message:
{ value: 'SQLITE_ERROR: no such table: foo',
writable: true,
enumerable: false, <<---------
configurable: true },
errno:
{ value: 1, writable: true, enumerable: true, configurable: true },
code:
{ value: 'SQLITE_ERROR',
writable: true,
enumerable: true,
configurable: true } }
SQLITE_ERROR: no such table: foo