一.Ajax準備知識:json
說起json,我們都知道了解就是python中的json模塊
json對象標記(是一種輕量級的數(shù)據(jù)交換格式
它基于 ECMAScript (w3c制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。
簡潔和清晰的層次結構使得 JSON 成為理想的數(shù)據(jù)交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網(wǎng)絡傳輸效率。
json其實是從js中拿出的一個對象,也可以說json是js的一個子集。
需要知道的:json的格式來源于js的格式
1.js支持單引號也支持雙引號,也可以沒有引號
//在js中吧{}這樣的類型叫做對象,js中沒有字典一說
data = {
'name':'haiyan',
"name":"haiyan",
name:"haiyan"
} //js對象默認會把自己的鍵當成字符串處理,所以可以加引號也可以不加
2.json的格式:
1、json只認雙引號的
2、json一定是一個字符串
3.下面那些是合格的字符串,那些不是?
合格的json對象:
["one", "two", "three"]
{ "one": 1, "two": 2, "three": 3 }
{"names": ["張三", "李四"] }
[ { "name": "張三"}, {"name": "李四"} ]
不合格的json對象:
{ name: "張三", 'age': 32 } // 屬性名必須使用雙引號
[32, 64, 128, 0xFFF] // 不能使用十六進制值
{ "name": "張三", "age": undefined } // 不能使用undefined
{ "name": "張三",
"birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
"getName": function() {return this.name;} // 不能使用函數(shù)和日期對象
}
python中的序列化(dumps)與反序列化(loads)
import json
i = 10
s = "dsfdsf"
l = [11,22,33]
dic = {"name":"haiyna","age":22}
b = True
# #吧基本數(shù)據(jù)類型轉換成字符串的形式
print(json.dumps(i),type(json.dumps(i))) #10 <class 'str'>
print(json.dumps(s),type(json.dumps(s))) #"dsfdsf" <class 'str'>
print(json.dumps(l),type(json.dumps(l))) #[11, 22, 33] <class 'str'>
print(json.dumps(dic),type(json.dumps(dic))) #{"name": "haiyna", "age": 22} <class 'str'>
print(json.dumps(b),type(json.dumps(b))) #true <class 'str'>
# ===============json反序列化=============
d = {"a":1,"b":"fdgfd"}
data = json.dumps(d)
print(data,type(data))
f = open("a.txt","w")
f.write(data) #注意這會寫進去的字符串時雙引號的格式
f.close()
# ===============json序列化=============
f = open("a.txt","r")
datat = f.read()
print(datat,type(datat)) #{"a": 1, "b": "fdgfd"} <class 'str'>
data = json.loads(datat)
print(data,type(data)) #{'a': 1, 'b': 'fdgfd'} <class 'dict'>
js中的序列化(stringify)與反序列化(parse)
json.stringify():用于將一個javaScript對象轉換為json字符串
json.parse():用于將一個json字符串轉換為javaScript對象
<script>
//===========js中的json序列化===========
s = '{"name":1}';
var data = JSON.parse(s);
console.log(data);
console.log(typeof data); //object
//===========js中的json的反序列化=======
s2={'name':'yuan'};
console.log(JSON.stringify(s2),typeof JSON.stringify(s2)) //string
</script>
json和xml的比較
1,xml也是存數(shù)據(jù)的一種格式,也是一種標記語言,它是利用節(jié)點進行查找的
2,json格式于20012001年由 Douglas Crockford 提出,目的就是取代繁瑣笨重的 XML 格式。
json格式有兩個顯著的優(yōu)點:書寫簡單一目了然,符合javaScript原生語法,可以解釋引擎直接處理,不用另外添加解析代碼。所以json迅速的被接受,已經(jīng)成為各大網(wǎng)站交換數(shù)據(jù)的標準格式,并被寫入ECMAScript 5,成為標準的一部分。
xml和json使用結構化方法來標記數(shù)據(jù),下面簡單比較
用xml來表示中國部分省市數(shù)據(jù)如下:
<?xml version="1.0" encoding="utf-8"?>
<country>
<name>中國</name>
<province>
<name>黑龍江</name>
<cities>
<city>哈爾濱</city>
<city>大慶</city>
</cities>
</province>
<province>
<name>廣東</name>
<cities>
<city>廣州</city>
<city>深圳</city>
<city>珠海</city>
</cities>
</province>
<province>
<name>臺灣</name>
<cities>
<city>臺北</city>
<city>高雄</city>
</cities>
</province>
<province>
<name>新疆</name>
<cities>
<city>烏魯木齊</city>
</cities>
</province>
</country>
用json如下:
{
"name": "中國",
"province": [{
"name": "黑龍江",
"cities": {
"city": ["哈爾濱", "大慶"]
}
}, {
"name": "廣東",
"cities": {
"city": ["廣州", "深圳", "珠海"]
}
}, {
"name": "臺灣",
"cities": {
"city": ["臺北", "高雄"]
}
}, {
"name": "新疆",
"cities": {
"city": ["烏魯木齊"]
}
}]
}
可以看到,JSON 簡單的語法格式和清晰的層次結構明顯要比 XML 容易閱讀,并且在數(shù)據(jù)交換方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得節(jié)約傳輸數(shù)據(jù)所占用得帶寬。
注意:json格式取代了xml給網(wǎng)絡傳輸帶來很大的便利,但是卻沒有xml的一目了然,尤其是json數(shù)據(jù)很長的時候,我們會陷入繁瑣復雜的數(shù)據(jù)節(jié)點查找中.
但是國人的一款在線工具 BeJson 、SoJson在線工具讓眾多程序員、新接觸JSON格式的程序員更快的了解JSON的結構,更快的精確定位JSON格式錯誤。