json 介绍
JavaScript Object Notation ,是一种轻量级的数据交换格式
具有自我描述性且易于理解
通过 JavaScript 对象标记法书写的文本
功能
交换数据
- 数据在浏览器和服务器之间交换时,只能是文本
- json 数据文本,并且我们可以把任何 JavaScript 对象转换成 json,然后将 json发送到服务器
- 也能从服务器接收到的任何 jason 转换成 JavaScript 对象
发送数据
- JSON.stringify ```javascript <!DOCTYPE html>
把 JavaScript 对象转换为 JSON 字符串,然后发送到服务器。
- 接收数据- JSON.parse(myJSON)```javascript<!DOCTYPE html><html><body><h1>把 JSON 格式的字符串,转换为 JavaScript 对象:</h1><p id="demo"></p><script>var myJSON = '{ "name":"Bill Gates", "age":62, "city":"Seattle" }';var myObj = JSON.parse(myJSON);document.getElementById("demo").innerHTML = myObj.name;</script></body></html>
- 存储数据 ```javascript <!DOCTYPE html>
通过 local storage 存储并取回数据:
<a name="jgTap"></a># json 语法- 是 JavaScript 语法的子集- 必须用双引号- <br />- 语法规则- 数据在名称/值对中- 数据由逗号分开- 花括号容纳对象- 方括号容纳数组- 在 json的键- 键必须是字符串,由双引号包围,而 JavaScript 中,键可以是字符串、数字或者标识符名称- 在 json 中的值,必须是以下数据类型之一- 字符串- 数字- 对象(json 对象)- 数组- 布尔- null- 而 JavaScript 中:还可以是- 函数- 日期- undefined```javascript<!DOCTYPE html><html><body><h1>使用括号表示法访问 JavaScript 对象:</h1><p id="demo"></p><script>var myObj, x;myObj = { name: "Bill Gates", age: 62, city: "Seattle" };x = myObj["name"];document.getElementById("demo").innerHTML = x;</script></body>
<!DOCTYPE html><html><body><h1>修改 JavaScript 对象:</h1><p id="demo"></p><script>var myObj, x;myObj = { name: "Bill Gates", age: 62, city: "Seattle" };myObj.name = "Steve Jobs";document.getElementById("demo").innerHTML = myObj.name;</script></body></html>
JSON与XML
json 实例
{"employees":[{ "firstName":"Bill", "lastName":"Gates" },{ "firstName":"Steve", "lastName":"Jobs" },{ "firstName":"Elon", "lastName":"Musk" }]}
<employees><employee><firstName>Bill</firstName><lastName>Gates</lastName></employee><employee><firstName>Steve</firstName><lastName>Jobs</lastName></employee><employee><firstName>Elon</firstName><lastName>Musk</lastName></employee></employees>
二者相同
- 都是自描述(即人类可读)的
- 都是分级的(值中有值)
- 都能被大量编程语言解析和使用
-
二者不同
json 不使用标签
- json 更短
- json 读写速度更快
- 可以使用数组
- json 可以通过标准 JavaScript 函数进行解析,而 XML 必须使用XML 解析式进行解析
json 数据类型
1. 字符串
2. 数字
3. json 对象
4. 数组
5. 布尔
6. null
不可以
<!DOCTYPE html><html><body><h1>用 JSON 字符串创建对象</h1><p id="demo"></p><script>var text = '{"employees":[' +'{"firstName":"Bill","lastName":"Gates" },' +'{"firstName":"Steve","lastName":"Jobs" },' +'{"firstName":"Elon","lastName":"Musk" }]}';obj = JSON.parse(text);document.getElementById("demo").innerHTML =obj.employees[1].firstName + " " + obj.employees[1].lastName;</script></body>
解析服务器中的 json——JavaScript 对象
<!DOCTYPE html><html><body><h1>使用 XMLHttpRequest 获取文件的内容</h1><p>JSON 格式的内容能够轻松转换为 JavaScript 对象。</p><p id="demo"></p><script>var xmlhttp = new XMLHttpRequest();xmlhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {var myObj = JSON.parse(this.responseText);document.getElementById("demo").innerHTML = myObj.name;}};xmlhttp.open("GET", "/example/json/json_demo.txt", true);xmlhttp.send();</script><p>查看 <a href="/exampl
解析为 JavaScript 数组
<!DOCTYPE html><html><body><h1>数组内容</h1><p>以 JSON 数组写的内容会被转换为 JavaScript 数组。</p><p id="demo"></p><script>var xmlhttp = new XMLHttpRequest();xmlhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {var myArr = JSON.parse(this.responseText);document.getElementById("demo").innerHTML = myArr[0];}};xmlhttp.open("GET", "/demo/json_demo_array.txt", true);xmlhttp.send();</script><p>查看 <a href="/example/json/json_demo_array.txt" target="_blank">json_demo_array.txt</a></p>
解析日期
<!DOCTYPE html><html><body><h1>把字符串转换为 date 对象</h1><p id="demo"></p><script>var text = '{"name":"Bill Gates", "birth":"1955-10-28", "city":"Seattle"}';var obj = JSON.parse(text, function (key, value) {if (key == "birth") {return new Date(value);} else {return value;}});document.getElementById("demo").innerHTML = obj.name + ", " + obj.birth;</script></body></html>
<!DOCTYPE html><html><body><h1>把字符串转换为函数</h1><p id="demo"></p><script>var text = '{"name":"Bill Gates", "age":"function() {return 62;}", "city":"Seattle"}';var obj = JSON.parse(text);obj.age = eval("(" + obj.age + ")");document.getElementById("demo").innerHTML = obj.name + ", " + obj.age();</script></body></html>
JSON字符串化
JSON.stringify()将 JavaScript 对象转换成字符串
在向 web 服务器发送数组时,必须是字符串格式。
JavaScript 对象进行字符串化
<!DOCTYPE html><html><body><h1>从 JavaScript 对象创建 JSON 字符串</h1><p id="demo"></p><script>var obj = { name: "Bill", age: 62, city: "Seatle" };var myJSON = JSON.stringify(obj);document.getElementById("demo").innerHTML = myJSON;</script></body>

JavaScript 数组字符串化
<!DOCTYPE html><html><body><h1>用 JavaScript 数组创建 JSON 字符串</h1><p id="demo"></p><script>var arr = [ "Bill Gates", "Steve Jobs", "Elon Musk" ];var myJSON = JSON.stringify(arr);document.getElementById("demo").innerHTML = myJSON;</script></body></html>

日期字符串化
直接将日期转化为字符串
<!DOCTYPE html><html><body><h1>JSON.stringify 会把任何日期对象转换为字符串</h1><p id="demo"></p><script>var obj = { name: "Bill Gates", today: new Date(), city: "Seattle" };var myJSON = JSON.stringify(obj);document.getElementById("demo").innerHTML = myJSON;</script></body></html>
函数字符串化
删除对象中的函数
<!DOCTYPE html><html><body><h1>JSON.stringify 会删除对象中的任何函数</h1><p id="demo"></p><script>var obj = { name: "Bill Gates", age: function () {return 62;}, city: "Seattle" };var myJSON = JSON.stringify(obj);document.getElementById("demo").innerHTML = myJSON;</script></body></html>
json 对象(Python 中字典)
格式
JSON 对象被花括号 {} 包围。
JSON 对象以键/值对书写。
键必须是字符串,值必须是有效的 JSON 数据类型(字符串、数字、对象、数组、布尔或 null)。
键和值由冒号分隔。
每个键/值对由逗号分隔。
访问对象
通过点点或者中括号访问对象
<!DOCTYPE html><html><body><h1>JSON 对象</h1><p>使用点号表示法访问 JSON 对象:</p><p id="demo"></p><script>var myObj, x;myObj = {"name":"Bill Gates", "age":62, "car":null};x = myObj.name;document.getElementById("demo").innerHTML = x;</script></body></html>
通过中括号
<!DOCTYPE html><html><body><h1>JSON 对象</h1><p>使用括号表示法访问 JSON 对象:</p><p id="demo"></p><script>var myObj, x;myObj = {"name":"Bill Gates", "age":62, "car":null};x = myObj["name"];document.getElementById("demo").innerHTML = x;</script></body>
遍历对象
遍历的是 key 值
<!DOCTYPE html><html><body><h1>JSON 对象</h1><p>如何遍历 JSON 对象中的所有属性。</p><p id="demo"></p><script>var myObj, x;myObj = {"name":"Bill Gates", "age":62, "car":null};for (x in myObj) {document.getElementById("demo").innerHTML += x + "<br>";}</script></body></html>
用中括号遍历属性值
<!DOCTYPE html><html><body><h1>JSON 对象</h1><p>使用括号表示法访问属性值。</p><p id="demo"></p><script>var myObj, x;myObj = {"name":"Bill Gates", "age":62, "car":null};for (x in myObj) {document.getElementById("demo").innerHTML += myObj[x] + "<br>";}</script></body></html>
嵌套的 json 对象
<!DOCTYPE html><html><body><h1>JSON 对象</h1><p>如何访问嵌套的 JSON 对象。</p><p id="demo"></p><script>var myObj = {"name":"Bill Gates","age":62,"cars": {"car1":"Porsche","car2":"BMW","car3":"Volvo"}}document.getElementById("demo").innerHTML += myObj.cars.car2 + "<br>";//or:document.getElementById("demo").innerHTML += myObj.cars["car2"];</script></body></html>
修改值
通过点点修改
<!DOCTYPE html><html><body><h1>JSON 对象</h1><p>如何修改 JSON 对象中的值。</p><p id="demo"></p><script>var myObj, i, x = "";myObj = {"name":"Bill Gates","age":62,"cars": {"car1":"Porsche","car2":"BMW","car3":"Volvo"}}myObj.cars.car2 = "Mercedes Benz";for (i in myObj.cars) {x += myObj.cars[i] + "<br>";}document.getElementById("demo").innerHTML = x;</script></body></html>
通过中括号修改
<!DOCTYPE html><html><body><h1>JSON 对象</h1><p>如何使用括号表示法修改 JSON 对象中的值。</p><p id="demo"></p><script>var myObj, i, x = "";myObj = {"name":"Bill Gates","age":62,"cars": {"car1":"Porsche","car2":"BMW","car3":"Volvo"}}myObj.cars["car2"] = "Mercedes Benz";for (i in myObj.cars) {x += myObj.cars[i] + "<br>";}document.getElementById("demo").innerHTML = x;</script></body></html>
删除对象属性
<!DOCTYPE html><html><body><h1>JSON 对象</h1><p>如何删除 JSON 对象的属性。</p><p id="demo"></p><script>var myObj, i, x = "";myObj = {"name":"Bill Gates","age":62,"cars": {"car1":"Porsche","car2":"BMW","car3":"Volvo"}}delete myObj.cars.car3;for (i in myObj.cars) {x += myObj.cars[i] + "<br>";}document.getElementById("demo").innerHTML = x;</script></body></html>
json 数组(类似于 Python 中列表)
格式
可以是:字符串、数字、对象、数组、布尔值、null
不可以:函数、日期、undefined
访问数组值
x = myObj.cars[0]
<!DOCTYPE html><html><body><h1>JSON 数组</h1><p>访问 JSON 对象的数组值。</p><p id="demo"></p><script>var myObj, x;myObj = {"name":"Bill Gates","age":62,"cars":[ "Porsche", "BMW", "Volvo" ]};x = myObj.cars[0];document.getElementById("demo").innerHTML = x;</script></body></html>
遍历数组值
for (i in myObj.cars)
<!DOCTYPE html><html><body><h1>JSON 数组</h1><p>使用 for in 循环遍历数组</p><p id="demo"></p><script>var myObj, i, x = "";myObj = {"name":"Bill Gates","age":62,"cars":[ "Porsche", "BMW", "Volvo" ]};for (i in myObj.cars) {x += myObj.cars[i] + "<br>";}document.getElementById("demo").innerHTML = x;</script></body></html>
for (i = 0; i < myObj.cars.length; i++)
<!DOCTYPE html><html><body><h1>JSON 数组</h1><p>使用 for 循环遍历数组</p><p id="demo"></p><script>var myObj, i, x = "";myObj = {"name":"Bill Gates","age":62,"cars":[ "Porsche", "BMW", "Volvo" ]};for (i = 0; i < myObj.cars.length; i++) {x += myObj.cars[i] + "<br>";}document.getElementById("demo").innerHTML = x;</script></body></html>
数组嵌套数据
<!DOCTYPE html><html><body><h1>JSON 数组</h1><p>遍历数组内的数组。</p><p id="demo"></p><script>var myObj, i, j, x = "";myObj = {"name":"Bill Gates","age":62,"cars": [{"name":"Porsche", "models":["911", "Taycan"]},{"name":"BMW", "models":["M5", "M3", "X5"]},{"name":"Volvo", "models":["XC90", "V60"] }]}for (i in myObj.cars) {x += "<h2>" + myObj.cars[i].name + "</h2>";for (j in myObj.cars[i].models) {x += myObj.cars[i].models[j] + "<br>";}}document.getElementById("demo").innerHTML = x;</script></body></html>
修改和删除数组值
<!DOCTYPE html><html><body><h1>JSON 数组</h1><p>如何修改 JSON 对象的数组值。</p><p id="demo"></p><script>var myObj, i, x = "";myObj = {"name":"Bill Gates","age":62,"cars": ["Porsche","BMW","Volvo"]}myObj.cars[2] = "Mercedes Benz";for (i in myObj.cars) {x += myObj.cars[i] + "<br>";}document.getElementById("demo").innerHTML = x;</script></body></html>
delete myObj.cars[2];
<!DOCTYPE html><html><body><h1>JSON 数组</h1><p>如何删除数组的属性。</p><p id="demo"></p><script>var myObj, i, x = "";myObj = {"name":"Bill Gates","age":62,"cars": ["Porsche","BMW","Volvo"]}delete myObj.cars[2];for (i in myObj.cars) {x += myObj.cars[i] + "<br>";}document.getElementById("demo").innerHTML = x;</script></body></html>
