簡體   English   中英

如何解決 JSON 解析錯誤“JSON.parse: 字符串文字中的錯誤控制字符”?

[英]How can I resolve JSON parsing error 'JSON.parse: bad control character in string literal'?

在 NodeJS 后端,我將數據發送到客戶端:-

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

//這里沒有錯誤,對象被完美地字符串化 //user是mongoDB結果中返回的對象MongoDB 文檔

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 的主鍵作為字符串,另外兩個 base 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 結果出現的?

\\n是表示換行的控制字符。 在 JSON 中,這些控制字符(更具體地說是\\ )必須在字符串中進行轉義。

這將引發錯誤:

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

這不會:

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

因此,一種方法是使用諸如replace東西來確保您的aboutme在 JSON 序列化之前正確轉義。 請參閱: 如何使用 JavaScript 轉義包含換行符的 JSON 字符串?

好的已經做了一些實驗並有一個解決方案。 訣竅是執行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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM