Javascript JSON.parse() 尝试解析字符串化 quill.js 羽毛笔时出错
Javascript JSON.parse() error while trying to parse stringified quill.js quill
我正在尝试使用 ejs 将一些对象发送给客户端。
至少到目前为止,我这样做没有遇到任何问题。
我这样存放羽毛笔
{"form_type":"blog","form_sub_type":"create","blog_title":"Test","quill_0":"{\"ops\":[{\"insert\":\"tesarfd\n\"}]}"}
当我首先尝试将它们发送给客户端时,我运行这个函数从文件
中获取对象
const fileToJson = async (filePath) => {
return new Promise(resolve => {
fs.readFile(filePath, 'utf-8', (err, data) => {
if (err) {
console.log(err);
resolve(false);
}
resolve(data);//returns json string
})
})
}
在客户端,
我尝试使用以下内容:
'<%-JSON.stringify(blog)%>'
'<%-blog%>'
当我登录第二个时,我只得到了 [Object object] 并且无法访问它的字段。
当我登录第一个时,我得到:
{"edit":true,"editable":true,"blog_id":3,"blog":{"form_type":"blog","form_sub_type":"create","blog_title":"Test","quill_0":"{"ops":[{"insert":"tesarfd\n"}]}"}}
无法解析。
产生错误的代码:
const blog_info = '<%-JSON.stringify(blog)%>';
console.log(JSON.parse(blog_info));
错误:
Uncaught SyntaxError: Unexpected token f in JSON at position 51
at JSON.parse (<anonymous>)
at blog_panel?id=6:335
编辑2:
来自源代码的行与另一个产生相同错误的字符串
const blog_content=JSON.parse('{"edit":true,"editable":true,"blog_id":7,"blog":"{\"form_type\":\"blog\",\"form_sub_type\":\"create\",\"blog_title\":\"Test\",\"quill_0\":\"\\"<p>Test</p>\\"\"}"}');
JSON.parse() 抛出:
Uncaught SyntaxError: Unexpected token o in JSON at position 3
at JSON.parse (<anonymous>)
at blog_panel?id=6:335
data.toString()
将 return "[Object object]"
,所以这就是您从 resolve
中得到的全部内容。您应该在那里调用 stringify
,这可能会有所帮助。
问题:
const blog_info = '<%-JSON.stringify(blog)%>';
console.log(JSON.parse(blog_info));
是 <%-JSON.stringify(blog)%>
放在字符串上下文中(在本例中为单引号)。让我举个例子来说明这个问题。
// example #1
// assumption
<% blog = {title: "Let's play Tic-Tac-Toe"} %>
// Then this will result in:
const blog_info = '<%-JSON.stringify(blog)%>';
const blog_info = '{"title":"Let's play Tic-Tac-Toe"}';
// Uncaught SyntaxError: unexpected token: identifier
// example #2
// assumption
<% blog = {title: "foo\nbar"} %>
// Then this will result in:
const blog_info = '<%-JSON.stringify(blog)%>';
const blog_info = '{"title":"foo\nbar"}';
console.log(JSON.parse(blog_info));
// Uncaught SyntaxError: JSON.parse: bad control character in string literal at line 1 column 14 of the JSON data
不是将结果放在字符串上下文中,而是直接将其分配给变量。 JSON 代表 JavaScript Object Notation 并与正常的 JavaScript* 兼容。这意味着将代码更改为:
const blog_info = <%-JSON.stringify(blog)%>;
console.log(blog_info);
使用与上述相同的示例,结果为:
// example #1
// assumption
<% blog = {title: "Let's play Tic-Tac-Toe"} %>
// Then this will result in:
const blog_info = <%-JSON.stringify(blog)%>;
const blog_info = {"title":"Let's play Tic-Tac-Toe"};
console.log(blog_info);
// prints: ⏵ Object { title: "Let's play Tic-Tac-Toe" }
// example #2
// assumption
<% blog = {title: "foo\nbar"} %>
// Then this will result in:
const blog_info = <%-JSON.stringify(blog)%>;
const blog_info = {"title": "foo\nbar"};
console.log(blog_info);
// prints: ⏵ Object { title: "foo\nbar" }
我正在尝试使用 ejs 将一些对象发送给客户端。 至少到目前为止,我这样做没有遇到任何问题。 我这样存放羽毛笔
{"form_type":"blog","form_sub_type":"create","blog_title":"Test","quill_0":"{\"ops\":[{\"insert\":\"tesarfd\n\"}]}"}
当我首先尝试将它们发送给客户端时,我运行这个函数从文件
中获取对象const fileToJson = async (filePath) => {
return new Promise(resolve => {
fs.readFile(filePath, 'utf-8', (err, data) => {
if (err) {
console.log(err);
resolve(false);
}
resolve(data);//returns json string
})
})
}
在客户端, 我尝试使用以下内容:
'<%-JSON.stringify(blog)%>'
'<%-blog%>'
当我登录第二个时,我只得到了 [Object object] 并且无法访问它的字段。 当我登录第一个时,我得到:
{"edit":true,"editable":true,"blog_id":3,"blog":{"form_type":"blog","form_sub_type":"create","blog_title":"Test","quill_0":"{"ops":[{"insert":"tesarfd\n"}]}"}}
无法解析。
产生错误的代码:
const blog_info = '<%-JSON.stringify(blog)%>';
console.log(JSON.parse(blog_info));
错误:
Uncaught SyntaxError: Unexpected token f in JSON at position 51
at JSON.parse (<anonymous>)
at blog_panel?id=6:335
编辑2: 来自源代码的行与另一个产生相同错误的字符串
const blog_content=JSON.parse('{"edit":true,"editable":true,"blog_id":7,"blog":"{\"form_type\":\"blog\",\"form_sub_type\":\"create\",\"blog_title\":\"Test\",\"quill_0\":\"\\"<p>Test</p>\\"\"}"}');
JSON.parse() 抛出:
Uncaught SyntaxError: Unexpected token o in JSON at position 3
at JSON.parse (<anonymous>)
at blog_panel?id=6:335
data.toString()
将 return "[Object object]"
,所以这就是您从 resolve
中得到的全部内容。您应该在那里调用 stringify
,这可能会有所帮助。
问题:
const blog_info = '<%-JSON.stringify(blog)%>'; console.log(JSON.parse(blog_info));
是 <%-JSON.stringify(blog)%>
放在字符串上下文中(在本例中为单引号)。让我举个例子来说明这个问题。
// example #1
// assumption
<% blog = {title: "Let's play Tic-Tac-Toe"} %>
// Then this will result in:
const blog_info = '<%-JSON.stringify(blog)%>';
const blog_info = '{"title":"Let's play Tic-Tac-Toe"}';
// Uncaught SyntaxError: unexpected token: identifier
// example #2
// assumption
<% blog = {title: "foo\nbar"} %>
// Then this will result in:
const blog_info = '<%-JSON.stringify(blog)%>';
const blog_info = '{"title":"foo\nbar"}';
console.log(JSON.parse(blog_info));
// Uncaught SyntaxError: JSON.parse: bad control character in string literal at line 1 column 14 of the JSON data
不是将结果放在字符串上下文中,而是直接将其分配给变量。 JSON 代表 JavaScript Object Notation 并与正常的 JavaScript* 兼容。这意味着将代码更改为:
const blog_info = <%-JSON.stringify(blog)%>;
console.log(blog_info);
使用与上述相同的示例,结果为:
// example #1
// assumption
<% blog = {title: "Let's play Tic-Tac-Toe"} %>
// Then this will result in:
const blog_info = <%-JSON.stringify(blog)%>;
const blog_info = {"title":"Let's play Tic-Tac-Toe"};
console.log(blog_info);
// prints: ⏵ Object { title: "Let's play Tic-Tac-Toe" }
// example #2
// assumption
<% blog = {title: "foo\nbar"} %>
// Then this will result in:
const blog_info = <%-JSON.stringify(blog)%>;
const blog_info = {"title": "foo\nbar"};
console.log(blog_info);
// prints: ⏵ Object { title: "foo\nbar" }