iT邦幫忙

1

js的json轉換問題

deh 2021-12-30 08:39:492097 瀏覽
  • 分享至 

  • xImage

各位前輩好
將Line post的參數使用JSON.stringify()轉成字串,得到如下字串

{
    "contextPath": "",
    "contentLength": 355,
    "postData": {
        "contents": "{\"destination\":\"U7743df08ee95a41d784ef25\",\"events\":[{\"type\":\"message\",\"message\":{\"type\":\"text\",\"id\":\"1594457\",\"text\":\"機器人\"},\"timestamp\":1640822758480,\"source\":{\"type\":\"group\",\"groupId\":\"C6a1057ca0ef4b98e4b748b\",\"userId\":\"Ue576c8aa3c01fe6c065b8ac9f4\"},\"replyToken\":\"ca44d4e70b6a403eda9a9d5\",\"mode\":\"active\"}]}",
        "length": 355,
        "name": "postData",
        "type": "application/json"
    },
    "parameters": {},
    "queryString": "",
    "parameter": {}
}

但想將該字串轉回物件,使用JSON.parse()則會失敗

Uncaught SyntaxError: Unexpected token d in JSON at position 92

想請問該如何處理?

froce iT邦大師 1 級 ‧ 2021-12-30 08:46:12 檢舉
跳脫字元"\"拿掉試試。
deh iT邦研究生 1 級 ‧ 2021-12-30 08:50:58 檢舉
如果假設contents也是object,所以跳脫字元拿掉,再把contents的"拿掉,就能成功轉成object。(只拿掉跳脫字元跟之前一樣不會過)
但原本的object的contents是string,
剛剛操作產生的新object的contents直接是object了。
要解決的問題是解決了,但JSON.parse()為什麼有這種問題就不知道了。
感謝回復
deh iT邦研究生 1 級 ‧ 2021-12-30 09:12:40 檢舉
取得的字串中間確實有經過Line,可能是有做什麼處理,不得而知就是了,故應該不是JSON.parse()的問題
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2021-12-30 09:01:23
最佳解答

基本來說,透過 stringify 轉換的字串。理論上來說一定可以用 parse 轉換回來。

你無法轉換回來的原因。可能是您有對其做了什麼動作。
只是不太清楚你做了什麼處理。

deh iT邦研究生 1 級 ‧ 2021-12-30 09:16:37 檢舉

取得的字串中間確實有經過Line,可能是有做什麼處理,二手資料的鍋吧!

3
海綿寶寶
iT邦大神 1 級 ‧ 2021-12-30 09:11:48

{\"destination\":\"U7743df08ee95a41d784ef25\"

改成

{\"destination\":\"df08ee95a41d784ef25\"

試試看

如果可以
就可能是那個 U7743 惹的禍(被當成 UniCode 轉換?)

如果不可以
那就是我亂講
/images/emoticon/emoticon55.gif

deh iT邦研究生 1 級 ‧ 2021-12-30 09:15:49 檢舉

感謝回復,測了一下不行,估計是像樓上說的有被處理過了

1
Nick
iT邦新手 5 級 ‧ 2022-01-06 10:58:23

既然是JS
那有沒有直接用console.log(Line post);
看看他會不會印出key value出來,正常來說應該是要印得出來
再說,你把它變成json字串有沒有檢查一下他現在格式typeof()
我自己串過line bot拿到的東西我是可以用,但我是用php去寫的,這種串接我都交給後端程式去拿,讓他在伺服器處理避免被修改

我要發表回答

立即登入回答