0基礎小白深入掌握Json「json轉js對象的方法」

前言:

上節說道:只見那周瑜拿着大刀,騎着大馬,飛奔而來。然後子龍一個回馬槍打的那周瑜是落荒而逃~~咳咳……

不好意思,跑題了,回到正題。

上節講解了js中處理json的一個很重要的方法:

JSON.stringify() ,沒有讀的小夥伴先去看一下文章:

你真會用js中的JSON(二)?

這節繼續來講另一個同樣重要的方法,怎麼樣把一個json字符串轉成json中的對象,有轉就有解嘛~~

JSON.parse()

該方法的作用是把json字符串轉成javascript中對象:

var json = '{"name": "張三", "age": 10, "address": "北京"}'
var obj = JSON.parse(json)
console.log(obj.name) // '張三'
console.log(obj.age) // 10
console.log(obj.address) // '北京'
// 用法還是挺簡單的。但是如果我不小心手殘了,
// 把json字符串寫錯了,比如:鍵忘記寫雙引號了,看看會有什麼效果

var errorJson = '{name: "張三", "age": 10, "address": "北京"}'
var obj1 = JSON.parse(errorJson)
// Uncaught SyntaxError: Unexpected token n in JSON at position 1

// 是的,報錯啦~~~
// 這說明,如果我們傳入的json字符串是一個錯誤的格式,那麼該方法會報錯

通常,我們會用try…catch語句來捕獲一下這個錯誤,

var errorJson = '{name: "張三", "age": 10, "address": "北京"}'
try{
  JSON.parse(errorJson)
}catch(e){
  // 捕獲錯誤,對錯誤對行處理
  console.log(e)
}

parse()方法還可以接收另一個可選參數,該參數和stringify()方法的第二個參數差不多,類型為函數類型的。

var json = '{"name": "張三", "age": 10, "address": "北京"}'
var handleFunction = function (key, value) {
  if (key === 'age') {
    return value + 10
  }
  return value
}
var obj = JSON.parse(json, handleFunction)
console.log(obj) // name: "張三", age: 20, address: "北京"}
// 上面代碼我們判斷如果鍵是`age`的話,就讓值加10,最終得到結果是:20
// 和 stringify()函數用法基本一樣。

對象中的toJSON

先說用法:如果某個對象中定義了toJSON方法,那麼在把個對象轉成json字符串的時候,就會調用這個方法,而忽略對象的其它屬性。

// 先來看一個沒有toJSON方法的對象
var person = {
  name: '張三',
  age: 10,
  address: '北京'
}
var json = JSON.stringify(person)
console.log(json) // {"name":"張三","age":10,"address":"北京"}
// 再看一下如果給這個對象加上toJSON方法
var person = {
  name: '張三',
  age: 10,
  address: '北京',
  toJSON: function(){
    return '我是toJSON方法的返回值'
  }
}
var json = JSON.stringify(person)
console.log(json) // "我是toJSON方法的返回值"
// 可以發現,如果定義了toJSON方法,stringify()就會調用對象的toJSON方法,
// 並且把返回值做為要轉成json的對象


// 再來看一個例子
var person = {
  name: '張三',
  age: 10,
  address: '北京',
  toJSON: function(){
    return {
      name: '李四',
      age: 20,
      address: '上海'
    }
  }
}
var json = JSON.stringify(person)
console.log(json) //{"name":"李四","age":20,"address":"上海"}
// 可以發現,要轉json的對象已經和原來不一樣了。

好了,js中的JSON知識點就介紹這麼多。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/274207.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:11
下一篇 2024-12-17 14:11

相關推薦

發表回復

登錄後才能評論