2023年4月23日 星期日

Javascript : 字串轉為 JSON 少括號的錯誤訊息

2023年4月23日 星期日

前幾天在研究怎麼利用程式,由 Google Drive 公開分享的資料夾頁面HTML原始碼中解析出圖片跟聲音的網址,發現其實瀏覽器在開啟分享的資料夾頁面後,畫面中的檔案清單,包括圖示、檔案的連結,都是利用 JavaScript 讀取設定後,動態產生的。而該設定看起來是可以轉成 JSON 格式的,不過我雖然已經由網頁原始碼中擷取出設定了,但執行可以將字串轉成 JSON 物件的「JSON.parse」,卻一直出現類似這樣的錯誤訊息:

Uncaught SyntaxError: Expected property name or '}' in JSON at position 1
    at JSON.parse (<anonymous>)
    at <anonymous>:3:6

試了大半天,就是找出不原因,最後只好用別的方法找出圖片及聲音檔案。

今天因為在研究利用 ChatGPT 製作雙語字幕的工具的過程中,發現了別人解決 JavaScript  CORS 問題的方法,原來有人在提供 CORS proxy 的服務,像這個 corsproxy,看起來還不錯:

遇到好東西,當然要來玩一下。用它可以解決因為 CORS 的安全機管制,無法在瀏覽器中直接以 JavasScript 來直接讀取 Google Drive 分享頁面的問題;當然囉!因為是 proxy 的機置,有敏感的資料就不要使用的好。

使用 crosproxy 後,可以用 Javascript 來讀取 Goolge Drive 資料夾的頁面原始碼了,可是 JSON.parse 的錯誤依然存在。所以認真的研究一下 JSON 的格式,才發現原來在 JSON 物件中,物件的名稱必須要是字串。來看一下像這個例子:

{aaa:"111", bbb:"222"}

它的格式就是錯的。所以如果我想使用「JSON.parse」來轉換:

JSON.parse('{aaa:"111", bbb:"222"}');

就會出現這樣的錯誤訊息:

Uncaught SyntaxError: Expected property name or '}' in JSON at position 1
    at JSON.parse (<anonymous>)
    at <anonymous>:1:6

其實有檢查並修正 JSON 格式的網站,例如這個:

將 {aaa:"111", bbb:"222"} 給上面的網站修正過後,它發現物件名稱少了引號,並修正為:

{"aaa":"111", "bbb":"222"}

轉換的指令改為:

JSON.parse('{"aaa":"111", "bbb":"222"}');

果然不再出現錯誤了。





沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket