如何解决JSON解析错误“ JSON.parse:字符串文字中的错误控制字符”?

时间:2020-08-23 07:02:25

标签: javascript node.js json mongodb

在NodeJS后端中,我将数据发送给客户端:-

res.end(filex.replace("<userdata>", JSON.stringify({name:user.name, uid:user._id, profile:user.profile}) ))

//这里没有错误,并且对象已完全字符串化 //用户是mongoDB结果中返回的对象 MongoDB document

JSON字符串如下所示:

{"name":"Rishavolva","uid":"5f3ce234fd83024334050872","profile":{"pic":{"small_link":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXBsaWNhcyI6MiwidXJpcyI6W3siZGJfbmFtZSI6ImlmcmRiMDAxIiwidGFibGUiOiJGSUxFIiwiaWQiOjQ4fSx7ImRiX25hbWUiOiJpZnJkYjAwMiIsInRhYmxlIjoiRklMRSIsImlkIjo0OH1dLCJ1aWRfd2hpdGVsaXN0IjoiKiIsImlhdCI6MTU5ODE2MzMzNX0.9NkGnEumn4JW8IN0KFgxgN_6_4wN8qOgezNTyzz9osY","big_link":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXBsaWNhcyI6MiwidXJpcyI6W3siZGJfbmFtZSI6ImlmcmRiMDAxIiwidGFibGUiOiJGSUxFIiwiaWQiOjQ3fSx7ImRiX25hbWUiOiJpZnJkYjAwMiIsInRhYmxlIjoiRklMRSIsImlkIjo0N31dLCJ1aWRfd2hpdGVsaXN0IjoiKiIsImlhdCI6MTU5ODE2MzMzNX0.yxQ1GrhLsWPn8Qwu42EfTDXqaYwFtrM6f_7cAH2eLRY"},"aboutme":"I am Rishav Bhowmik\r\nand this is navratna pulaow"}}

UID只是mongodb的主键(作为字符串),其他两个基本的64个字符串只是JWT令牌。

现在,当此JSON字符串到达​​浏览器时,我将使用以下简单语法对其进行解析:

JSON.parse(`<userdata>`)
//remember I used filex.replace("<userdata>", JSON.stringify...) in the server

作为参考,我的MongoDB文档在这里:

现在,当在JSON字符串上执行JSON.parse时,它将在最终的JS代码上看起来像这样。

JSON.parse(`{"name":"Rishavolva","uid":"5f3ce234fd83024334050872","profile":{"pic":{"small_link":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXBsaWNhcyI6MiwidXJpcyI6W3siZGJfbmFtZSI6ImlmcmRiMDAxIiwidGFibGUiOiJGSUxFIiwiaWQiOjQ4fSx7ImRiX25hbWUiOiJpZnJkYjAwMiIsInRhYmxlIjoiRklMRSIsImlkIjo0OH1dLCJ1aWRfd2hpdGVsaXN0IjoiKiIsImlhdCI6MTU5ODE2MzMzNX0.9NkGnEumn4JW8IN0KFgxgN_6_4wN8qOgezNTyzz9osY","big_link":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXBsaWNhcyI6MiwidXJpcyI6W3siZGJfbmFtZSI6ImlmcmRiMDAxIiwidGFibGUiOiJGSUxFIiwiaWQiOjQ3fSx7ImRiX25hbWUiOiJpZnJkYjAwMiIsInRhYmxlIjoiRklMRSIsImlkIjo0N31dLCJ1aWRfd2hpdGVsaXN0IjoiKiIsImlhdCI6MTU5ODE2MzMzNX0.yxQ1GrhLsWPn8Qwu42EfTDXqaYwFtrM6f_7cAH2eLRY"},"aboutme":"I am Rishav Bhowmik\r\nand this is navratna pulaow"}}`)

我收到此错误:

Uncaught SyntaxError: JSON.parse: bad control character in string literal at line 1 column 702 of the JSON data

JSON字符串中位置702处的字符串为\n

首先,\n如何成为控制字符?

我应该怎么做才能解决这个问题? 是否由于MONGODB结果而解决了这个问题?

2 个答案:

答案 0 :(得分:1)

\n是表示新行的控制字符。在JSON中,这些控制字符(更具体地说是\)必须在字符串内转义。

这将引发错误:

JSON.parse(`{"hello":"world\n"}`)

这不会:

   JSON.parse(`{"hello":"world\\n"}`)

所以一种方法是使用类似replace的东西来确保您的aboutme在JSON序列化之前正确转义。参见:How to escape a JSON string containing newline characters using JavaScript?

答案 1 :(得分:0)

好的,做了一些实验并找到了解决方案。 技巧是JSON.stringify()做两次,

就像

html_text.replace('/*<whatever>*/', JSON.stringify( JSON.stringify(the_object) ) )

如果假设html_text的行是

<script>
const object_inbrowser = JSON.parse(/*<whatever>*/)
// no need to add qotes, `JSON.stringify` in the server will do that for you
</script>