前言:
上節說道:只見那周瑜拿著大刀,騎著大馬,飛奔而來。然后子龍一個回馬槍打的那周瑜是落荒而逃~~咳咳……
不好意思,跑題了,回到正題。
上節講解了js中處理json的一個很重要的方法:
JSON.stringify() ,沒有讀的小伙伴先去看一下文章:
這節繼續來講另一個同樣重要的方法,怎么樣把一個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知識點就介紹這么多。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。
發表評論
請登錄后評論...
登錄后才能評論