我正在尝试将JSON对象插入MySQL JSON列,并且得到: Invalid JSON text: "Invalid escape character in string."
令人反感的字符是\n
对象的这一部分:
"summary":"Summary of Qualifications:\nAccomplished and results-driven General Business Director with a consistent track record."
我尝试了JSON.stringify,JSON_OBJECT,JSON_QUOTE,最近的尝试包括:
summary.replace("\n", "\\n")
以及用适当的替换现有转义字符的变体?转义字符。
我正在使用Node,Express和JawsDB(如果可能有任何影响)。
编辑:这是实际的插入代码:
const fields = '(myField)';
const values = `('${JSON.stringify(field.contents || {})}')`;
db.query('INSERT INTO mydb ' + fields + ' VALUES ' + values,
err => {
if (err) {
console.log(values);
throw(err) ;
}
}
);
您正在使用字符串连接来构建查询,这是一种危险的操作(SQL注入),并且容易出错(意外/错误的字符串转义,字符串中的嵌入引号问题'
)。
您的查询,重写为使用占位符,应正常工作:
db.query('INSERT INTO mydb ' + fields + ' VALUES (?)', [ JSON.stringify(field.contents || {}) ], err ...
潜在的问题是,在MySQL文字字符串表达式中,\n
并不表示\
+ n
,而是表示ASCII 0x10(换行符)。在JSON中,带引号的字符串内的换行符无效-JSON字符串中的换行符序列化为两个字符\
+ n
,并且MySQL的字符串解析器识别此模式的含义与JSON含义相同巧合,尽管这种约定很常见。在这里,它让您很痛苦,因为您打算向MySQL发送两个字符,但解析器会对其进行解释。
您可能已经 制定 通过了加倍解决此砍死\
到\\
字符串,该服务器将其解释为文字的\
+ n
,但允许数据库驱动程序模块来处理任何必要的引号和转义对你来说是更正确的做法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句