JSON認識
JSON是JavaScript Object Notation的縮寫,它是一種資料交換格式。
JSON實際上是JavaScript的一個子集。在JSON中,一共就這麼幾種資料型別:
number:和JavaScript的
number
完全一致;boolean:就是JavaScript的
true
或false
;string:就是JavaScript的
string
;null:就是JavaScript的
null
;array:就是JavaScript的
Array
表示方式——[]
;object:就是JavaScript的
{ ... }
表示方式。
以及上面的任意組合。
並且,JSON還定死了字符集必須是UTF-8,表示多語言就沒有問題了。為了統一解析,JSON的字串規定必須用雙引號""
,Object的鍵也必須用雙引號""
。
由於JSON非常簡單,很快就風靡Web世界,並且成為ECMA標準。幾乎所有程式語言都有解析JSON的庫,而在JavaScript中,我們可以直接使用JSON,因為JavaScript內建了JSON的解析。
把任何JavaScript物件變成JSON,就是把這個物件序列化成一個JSON格式的字串,這樣才能夠透過網路傳遞給其他計算機。
如果我們收到一個JSON格式的字串,只需要把它反序列化成一個JavaScript物件,就可以在JavaScript中直接使用這個物件了。
序列化
讓我們先把小明這個物件序列化成JSON格式的字串:
var xiaoming = { name: '小明', age: 14, gender: true, height: 1.65, grade: null, 'middle-school': '"W3C" Middle School', skills: ['JavaScript', 'Java', 'Python', 'Lisp']};JSON.stringify(xiaoming); // '{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":""W3C" Middle School","skills":["JavaScript","Java","Python","Lisp"]}'
要輸出得好看一些,可以加上引數,按縮排輸出:
JSON.stringify(xiaoming, null, ' ');
結果:
{ "name": "小明", "age": 14, "gender": true, "height": 1.65, "grade": null, "middle-school": ""W3C" Middle School", "skills": [ "JavaScript", "Java", "Python", "Lisp" ]}
第二個引數用於控制如何篩選物件的鍵值,如果我們只想輸出指定的屬性,可以傳入Array
:
JSON.stringify(xiaoming, ['name', 'skills'], ' ');
結果:
{ "name": "小明", "skills": [ "JavaScript", "Java", "Python", "Lisp" ]}
還可以傳入一個函式,這樣物件的每個鍵值對都會被函式先處理:
function convert(key, value) { if (typeof value === 'string') { return value.toUpperCase(); } return value;}JSON.stringify(xiaoming, convert, ' ');
上面的程式碼把所有屬性值都變成大寫:
{ "name": "小明", "age": 14, "gender": true, "height": 1.65, "grade": null, "middle-school": ""W3C" MIDDLE SCHOOL", "skills": [ "JAVASCRIPT", "JAVA", "PYTHON", "LISP" ]}
如果我們還想要精確控制如何序列化小明,可以給xiaoming
定義一個toJSON()
的方法,直接返回JSON應該序列化的資料:
var xiaoming = { name: '小明', age: 14, gender: true, height: 1.65, grade: null, 'middle-school': '"W3C" Middle School', skills: ['JavaScript', 'Java', 'Python', 'Lisp'], toJSON: function () { return { // 只輸出name和age,並且改變了key: 'Name': this.name, 'Age': this.age }; }};JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'
反序列化
拿到一個JSON格式的字串,我們直接用JSON.parse()
把它變成一個JavaScript物件:
JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}JSON.parse('true'); // trueJSON.parse('123.45'); // 123.45
JSON.parse()
還可以接收一個函式,用來轉換解析出的屬性:
JSON.parse('{"name":"小明","age":14}', function (key, value) { // 把number * 2: if (key === 'name') { return value + '同學'; } return value;}); // Object {name: '小明同學', age: 14}
在JavaScript中使用JSON,就是這麼簡單!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2318/viewspace-2815824/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- package.json的認識PackageJSON
- 【json】json基礎知識JSON
- 認識CopyOnWriteArrayList
- 認識ncurses
- 認識jqueryjQuery
- 認識DockerDocker
- JQuery認識jQuery
- 認識htmlHTML
- 認識RedisRedis
- 認識 LLVMLVM
- 認識 Service Worker
- Android - 認識ContextAndroidContext
- 感性認識JWTJWT
- fragment小認識Fragment
- 認識mysql(1)MySql
- 認識mysql(3)MySql
- 初步認識zookeeper
- 認識微服務微服務
- 示波器再認識
- Linux基本認識Linux
- 認識 Here Document
- 深入認識LinuxLinux
- Mybatis初步認識MyBatis
- 關於UI設計行業的認識再到認識UI行業
- 認識並使用PromisePromise
- Android-認識BitmapAndroid
- 認識Java泛型Java泛型
- 初步認識Apache IgniteApache
- Kafka基礎認識Kafka
- Powershell————1、認識Powershell
- Hadoop 工具的認識Hadoop
- 認識vue-routerVue
- 一、認識 REST AssuredREST
- 認識類和物件物件
- 認識設計模式設計模式
- Docker初認識(一)Docker
- 認識鴻蒙Context鴻蒙Context
- 認識鴻蒙ContextUQ鴻蒙Context