亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JSON Parse Unexpected token h 在字符串值中引起引號

JSON Parse Unexpected token h 在字符串值中引起引號

皈依舞 2022-06-09 16:23:50
我有一個從表中得到的 JSON 字符串,這是我的 JSON    {"subtitle":"Information","desc":"Hi, Welcome.\\n                            <br><br>\\n                            You can access our website <a href=\\"https://test.com\\">here</a>.\\n                            <br><br>\\n                            Dont forget, cost: only $2! \\n                            <br>\\n                            <br>\\n                            <br>\\n                            <br>\\n                            Thankyou,<br>\\n                            Regards"}當我試圖做json.parse()但我得到一個錯誤SyntaxError:JSON 中第 154 位的意外標記 h。我認為這是由于"URL 或冒號中的引號引起的:。如何將它們傳遞給 JSON?更新這是我獲取數據的方式:var body_inbox = {};body_inbox.subtitle = 'Information';body_inbox.desc = `Hi, Welcome.                    <br><br>                    You can access our website <a href="https://test.com">here</a>.                    <br><br>                    Dont forget, cost: only $2!                    <br>                    <br>                    <br>                    <br>                    Thankyou,<br>                    Regards`;body_inbox = JSON.stringify(body_inbox);我很困惑,我在表中發現許多數據在換行符\\n和 url中有雙反斜杠<a href=\\"https://test.com\\">here</a>。我只是嘗試使用 JSON.stringify 創建新數據,結果是\nand <a href=\"https://test.com\">here</a>。為什么會這樣?筆記抱歉,前面的數據有誤,有誤導性。應該<a href=\\"https://test.com\\">不是<a href="\\https://test.com\\">
查看完整描述

4 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

雙反斜杠應該是單反斜杠。一個反斜杠轉義了后面的字符,所以你用雙倍做的是轉義第二個反斜杠。它阻塞了 href,因為后面的引號結束了字符串,之后解析器將 url 中的“h”作為原始字符命中。


{ message: "...our website <a href=\\"https://test.com\\">here</a>" }

//                                   ^ parser thinks the string ends here

//                                     and doesn't know what to make of

//                                     https://...

我的猜測是數據被兩個不同的進程轉義了兩次(或者同一個進程運行了兩次)。


假設示例:數據被創建,并在進入數據庫的過程中被轉義。所以現在所有引號前面都有一個反斜杠。然后對數據進行編輯并在數據庫中更新記錄,然后再次運行轉義。但是輸入字符串從第一次開始就已經包含反斜杠,并且因為反斜杠本身很特殊并且需要轉義,所以當字符串在返回數據庫的途中(再次)轉義時,您最終會得到雙反斜杠。


您可以通過在控制臺中對字符串進行兩次轉義來看到這種情況。(這不是反斜杠,但它說明了問題):


const input = '"This string is quoted."';


const once = encodeURI(input);

// encodes the quotes as '%22'

// "%22This%20string%20is%20quoted.%22"


const twice = encodeURI(once);

// encodes the '%' in '%22' as '%25', and you end up with `%2522`

// "%2522This%2520string%2520is%2520quoted.%2522"


查看完整回答
反對 回復 2022-06-09
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

使用模板字符串保存數據。


const json = `{"subtitle":"Information","desc":"Hi, Welcome.\\n<br><br>\\nYou can access our website <a href=\\"https://test.com\\">here</a>.\\n<br><br>\\nDont forget, cost: only $2!\\n<br>\\n<br>\\n<br>\\n<br>\\n Thankyou,<br>\\n Regards"}` console.log(JSON.parse(json))


查看完整回答
反對 回復 2022-06-09
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

json 中的雙引號(值)只需要一個正斜杠(\)。所以你的json應該是

{"subtitle":"Information","desc":"Hi, Welcome.\\n                            <br><br>\\n                            You can access our website <a href=\"https://test.com\">here</a>.\\n                            <br><br>\\n                            Dont forget, cost: only $2! \\n                            <br>\\n                            <br>\\n                            <br>\\n                            <br>\\n                            Thankyou,<br>\\n                            Regards"}



查看完整回答
反對 回復 2022-06-09
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

非常感謝您的所有回答。有助于找出由雙反斜杠引起的解析失敗,雙反斜杠轉義了第二個反斜杠而不是雙引號"。

數據有雙反斜杠,因為這是來自克隆數據庫的數據,我認為它發生在轉換為 SQL 文件的過程中。


查看完整回答
反對 回復 2022-06-09
  • 4 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號