摘要:簡介是對象表示法的縮寫是一種數(shù)據(jù)格式而不是一種編程語言用來表示結(jié)構(gòu)化數(shù)據(jù)是的一個嚴(yán)格子集并不從屬于很多編程語言都可以用數(shù)據(jù)格式語法語法可以表示以下三種類型的值簡單值字符串?dāng)?shù)值布爾值但是不支持對象數(shù)組不支持變量函數(shù)對象實例簡單值字符串?dāng)?shù)字布爾
JSON 簡介
JSON是JavaScript Object Notation(JavaScript對象表示法)的縮寫
JSON是一種數(shù)據(jù)格式, 而不是一種編程語言, 用來表示結(jié)構(gòu)化數(shù)據(jù)
JSON是JavaScript的一個嚴(yán)格子集
JSON并不從屬于JavaScript, 很多編程語言都可以用JSON數(shù)據(jù)格式
語法JSON語法可以表示以下三種類型的值:
簡單值: 字符串/數(shù)值/布爾值/null, 但是不支持undefined
對象
數(shù)組
JSON不支持變量/函數(shù)/對象實例
簡單值字符串
"Hello JSON"
數(shù)字
66
布爾值
true
null
null對象
和JavaScript對比來看 ->
JavaScript表示對象
鍵值對的鍵可以加引號也可以不加, 如果加引號, 可以加單引號也可以加雙引號
// 最常見就這么寫 const obj1 = { foo: "bar", num: 66, status: true }; // 這么寫也oconstet obj2 = { "foo": "bar", "num": 66, "status": true }; // 這么寫也ok const obj1 = { "foo": "bar", "num": 66, "status": true };
JSON表示對象
鍵值對的鍵必須加雙引號(手寫JSON時一定要注意)
對象沒有變量聲明, 因為JSON根本就沒有變量的概念(它不是一個編程語言)
末尾沒有分號
{ "foo": "bar", "num": 66, "status": true }
和JavaScript相似, 對象可以嵌套對象
{ "foo": "bar", "num": 66, "status": true, "baz": { "num": 88 } }
注, 同名屬性可以在不同的對象中, 但是不能出現(xiàn)在同一個對象中
數(shù)組和JavaScript對比來看 ->
JavaScript表示數(shù)組
let arr = ["hello", 66, true];
JSON表示數(shù)組
同樣沒有變量聲明和結(jié)尾的分號, 同時注意字符串簡單值要加雙引號
["hello", 66, true]
數(shù)組和對象結(jié)合起來可以構(gòu)成復(fù)雜的集合, 比如students.json文件中可能是這樣嬸兒的
[ { "name": "小明", "age": 10, "score": { "math": 88, "english": 99 } }, { "name": "小強", "age": 11, "score": { "math": 98, "english": 96 } } ]
看到以上同JavaScript的不同之處, 我們可以知道為什么說JSON是JavaScript的一個嚴(yán)格子集了吧
JSON序列化與解析 基本用法ECMAScript5定義了全局對象JSON, 用來解析JSON字符串
簡單來說, JSON對象有兩個方法
JSON.stringify(): 把JavaScript對象序列化為JSON字符串
JSON.parse(): 把JSON字符串解析為原生JavaScript值
const book = { name: "Learn JavaScript in One Day", pages: 1 }; const jsonText = JSON.stringify(book); // 序列化 // "{"name":"Learn JavaScript in One Day","pages":1}" const parseText = JSON.parse(jsonText); // 解析 // {name: "Learn JavaScript in One Day", pages: 1}
默認(rèn)情況下, JSON.stringify()輸出的JSON字符串不包含任何空格字符或縮進(jìn)(是不是給我們提供了一種將去除數(shù)據(jù)中無用的空白和縮進(jìn)的方法呢).
在序列化JavaScript對象時, 所有函數(shù)及原型成員都會被有意忽略, 不體現(xiàn)在結(jié)果中. 此外, 值為undefined的任何屬性也都會被跳過. 結(jié)果中最終都是值為有效JSON數(shù)據(jù)類型的實例屬性.
const book = { name: "Learn JavaScript in One Day", pages: 1, foo: undefined }; const jsonText = JSON.stringify(book); // 序列化 // "{"name":"Learn JavaScript in One Day","pages":1}" // foo的值為undefined, 所被忽略掉了
將JSON字符串直接傳遞給JSON.parse()就可以得到相應(yīng)的JavaScript值.
JSON.parse()就是JSON.stringify()的逆向操作. 將一個JavaScript值序列化之后再解析JSON.parse(JSON.stringify(foo))和原來的foo幾乎一樣.
注意, 為什么說是幾乎一樣呢?
如果foo是一個對象或數(shù)組, 那么這么一折騰就變成了兩個不同的對象或數(shù)組了;
這就提供了一種克隆對象和數(shù)組的方法
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/103341.html
摘要:此外,與訓(xùn)練機器學(xué)習(xí)模型的作業(yè)相比,作業(yè)具有不同的執(zhí)行配置文件。此外,還制作了一個界面,以便控制機器學(xué)習(xí)的參數(shù)指定用于訓(xùn)練的數(shù)據(jù)量等。 摘要: 一份機器學(xué)習(xí)過來人的經(jīng)驗清單分享,主要是包含一些關(guān)于構(gòu)建機器學(xué)習(xí)工作流以及Apache Spark應(yīng)該注意的一些事項,希望這個清單能夠幫助那些正在學(xué)習(xí)機器學(xué)習(xí)的相關(guān)人員少走一些彎路,節(jié)約一些時間。 showImg(https://segment...
摘要:歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面不僅僅是代碼作為現(xiàn)代應(yīng)用,的大量使用,使得前端工程師們?nèi)粘5拈_發(fā)少不了拼裝模板,渲染模板。我們今天就來聊聊,拼裝與渲染模板的那些事兒。一改俱改,一板兩用。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog...
摘要:歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面不僅僅是代碼作為現(xiàn)代應(yīng)用,的大量使用,使得前端工程師們?nèi)粘5拈_發(fā)少不了拼裝模板,渲染模板。我們今天就來聊聊,拼裝與渲染模板的那些事兒。一改俱改,一板兩用。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog...
閱讀 1457·2021-09-24 10:26
閱讀 3750·2021-09-06 15:02
閱讀 709·2019-08-30 14:18
閱讀 635·2019-08-30 12:44
閱讀 3169·2019-08-30 10:48
閱讀 2003·2019-08-29 13:09
閱讀 2058·2019-08-29 11:30
閱讀 2370·2019-08-26 13:36