1. 程式人生 > 其它 >(已解決)Unexpected token o in JSON at position 1

(已解決)Unexpected token o in JSON at position 1

講這個問題之前先普及一下JSON.parse()和JSON.stringify()方面的知識:
JSON.parse() 方法用於將一個 JSON 字串轉換為物件,如

var str = '{"name":"LeonWu","age":"18"}'
JSON.parse(str);
//結果為一個Object
// age: "18";
// name: "LeonWu"; 

JSON.stringify() 方法是將一個JavaScript值(物件或者陣列)轉換為一個 JSON字串,如

var a = {a:1,b:2,c:"LeonWu"};
JSON.stringify(a);
//結果為 "{"a":1,"b":2,"c":"LeonWu"}"

最近在做微信小程式專案,遇到了這個問題:
在這裡插入圖片描述
我是想把使用者選擇的東西傳到另一個頁面:

submit() {
        let cartlist = JSON.stringify(this.data.cart);  
        //這裡我又定義了一個變數接收轉換後的物件,就是因為這裡為後面埋下了伏筆
       console.
log(cartlist); wx.navigateTo({ url: '../order/order?cartlist=' + cartlist, }) }

另一個頁面:

onLoad(options){
   console.log(JSON.parse(options));  //哈哈沒那麼容易,報錯了在這裡
},

其實在這裡我傳過來的值是這樣的:

{cartlist: "{"count":1,"total":2,"list":{"1":1}}"
} //型別還是物件

這雖然是一個物件,但是不是json字串,cartlist的值才是json字串,所以這裡我錯了。JSON.parse(裡面必須是一個json字串)

修改後:

onLoad(options){
       console.log(options.cartlist);  //{"count":1,"total":3,"list":{"2":1}}
       let a = JSON.parse(options.cartlist);
       console.log(a.count);
},   // 1

如果你傳參的時候沒有指定一個值(上面那個cartlist)接收轉換後的值(物件轉為字串),那你可以直接使用JSON.parse。