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。

這裡記錄下我看過的類似問題的部落格:

https://blog.csdn.net/dxmgood/article/details/52881642?utm_source=blogxgwz1

https://blog.csdn.net/wxl1555/article/details/79184076