JSON轉換異常——SyntaxError: Unexpected token n in JSON at position 1 如何處理


如題,JSON字符串轉換JSON格式報錯:

這個問題,一般在JSON字符串轉換JSON對象的時候才會出現的,下面就詳細介紹下。

為什么會出現這個問題?

對於JSON來說,主要由兩種格式,一種是對象,另一種是數組,如下:

//JSON 對象
var jsonObj={ "name":"json", "alexa":10000, "site":null }

//JSON 數組
var jsonArr=[ "Google", "Runoob", "Taobao" ]
//亦或者
var jsonArr=[
   {
     "name":"json",
     "alexa":10000, 
    "site":null 
  },{ 
    "name":"json", 
    "alexa":10000, 
    "site":null
  } 
]

這么看,跟 javascript的對象和數組並沒有什么區別。但是有一點需要注意的是,JSON中對象的key值是必須要有引號的(js對象的key是不需要引號的,雖然也能兼容帶引號的寫法)。

那么,再來看下JSON.parse的用法:

JSON.parse(text[, reviver])

其中:

  • text:必需, 一個有效的 JSON 字符串
  • reviver: 可選,一個轉換結果的函數, 將為對象的每個成員調用此函數。

如上,JSON.parse()函數接收的是有效的JSON字符串,如這樣:

//正確用法示例
var jsonStr = '{"name":"jsonStr", "type":"str"}'
var jsonObj = JSON.parse(jsonStr)
//輸出 { "name":"runoob", "alexa":10000, "site":"www.runoob.com" }

那么,普通js對象格式的字符串呢?

//正確用法示例
var objStr = '{name:"objStr", type":str"}'
var jsonObj = JSON.parse(objStr)
//SyntaxError: Unexpected token n in JSON at position 1

如上,由於JSON.parse()接收了無效的JSON字符串,導致報錯。

那么如何解決這個問題呢?

JSON通常被用來與服務器端交換數據,接收服務器數據時一般是字符串,由前端將JSON數據線轉換為JSON數據。

如果后端返回的字符串數據中是無效的JSON字符串(key無引號),那么就無法使用JSON.parse()來進行數據轉換了。

對於非有效JSON字符串,可以使用JS的eval()函數進行轉換:

var str = '{name:"小明",age:18}';
var json = eval("("+str+")")

除了字符串格式,還有些后端開發會直接返回xml格式數據給到前端,也可能會出現這個問題。如果是這樣也只有使用eval()函數了。

當然,這是在明確數據源的情況下使用eval(),eval也並不是能那么隨意的使用的。eval也存在一個安全問題,就是它可以執行傳給它的任何字符串,所以永遠不要傳入字符串或者來歷不明、不受信任源的參數,以免造成不可預知的后果。

對eval感興趣的可以詳細研究了解下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM