<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
學學Python中操縱JSON的知識。學完本文,你可以學到如下內容:
JSON的全稱是 JavaScript Object Notation,是一種輕量級的資料交換格式。最初,JSON 只是 JavaScript 的子集,但由於其簡單易用而迅速走紅。
現今大部分程式語言都支援對JSON的解析與生成,而近些年異軍突起的NoSQL資料庫也多參照JSON來設計資料儲存格式,例如Mongodb的BSON(Binary JSON)。
JSON有以下六種資料型別:number、boolean、string、null、array、object。前三種很好理解,第四個null對應Python的None,最後兩種,對應Python的列表和字典。
{ "name": "小明", "age": 14, "gender": true, "grade": null, "skills": [ "JavaScript", "Java", "Python" ] }
在JSON出現之前,人們用XML在網路上交換資料,在JSON出現後,它基本上就取代了XML的位置。兩者的共同之處顯而易見,它們都是結構化的語言,都可以用於網路資料的交換。
兩者最大的差異在於它們的“出身”不同,也就是它們被創造的目的不同。
XML是W3C(全球資訊網聯盟)釋出的可延伸標示語言(Extensible Markup Language),最初設計來彌補HTML的不足,以強大的擴充套件性滿足網路資訊釋出的需要,與它“同級”的有:XHTMLCSSECMAScript等。它包含DTD、XSD、XPath、XSL等一大堆複雜的規範,在資料儲存、擴充套件及高階檢索等方面都有作用。後來被用於網路資料交換,頗有點大材小用的意思,雖然可勝任,卻也有點複雜和冗餘。
而JSON是ECMAScript標準的子集,設計之初就是為了克服XML在資料交換上的劣勢,所以一方面,它像XML一樣具有簡潔而清晰的層次結構,另一方面,它比XML小巧精緻,更加適用於網路資料的傳輸。
JSON也不是沒有缺點,當結構層級很多的時候,它會讓人陷入繁瑣複雜的資料節點查詢中,在可讀性上要比XML差。
將python的物件轉化為字串,這個過程也稱為序列化,與之相對,將JSON字串轉化為python物件,這個過程被稱為反序列化。
序列化格式如下,json.dumps()把python物件序列化,json.dump() 先序列化,然後將內容存入檔案:
json.dumps(obj, , skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, *kw) json.dump(obj, fp, , skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, *kw)
In [1]: import json In [2]: d = dict(name='Tom', age='8', score=88) In [3]: json.dumps(d) Out[3]: '{"name": "Tom", "age": "8", "score": 88}' In [4]: with open('test.json', 'w') as f: ...: json.dump(d, f)
用的比較多的引數有:
反序列化格式如下,json.loads()從記憶體中讀取內容解析,json.load() 從檔案中讀取內容解析:
json.loads(s,
, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None,
*kw)
json.load(fp,
, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None,
*kw)
In [1]: import json2In [2]: d = dict(name='Tom', age='8', score=88) In [3]: tom_json = json.dumps(d) In [4]: json.loads(tom_json) Out[4]: {'age': '8', 'name': 'Tom', 'score': 88} In [5]: with open('test.json', 'r') as f: ...: print(json.load(f)) {'name': 'Tom', 'age': '8', 'score': 88}
json.loads()比json.load() 多了一個encoding引數,可以將傳入的字串重新編碼。
序列化的ensure_ascii引數與反序列化的encoding相對應,都是處理字元編碼,一旦處理不好,就會導致中文亂碼問題。
Python2的字元編碼亂七八糟,也廣被人詬病,如果不幸遇到Python2專案,可參照如下例子解決。
字串在Python2內部的表示是unicode編碼。因此,在做編碼轉換時,需要以unicode作為中間編碼,即先將其他編碼的字串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
# -*- coding: utf-8 -*- m = {'a' : '你好'} print m =>{'a': 'xe4xbdxa0xe5xa5xbd'} print json.dumps(m) =>{"a": "u4f60u597d"} print json.dumps(m,ensure_ascii=False) =>{"a": "浣犲ソ"} print json.dumps(m,ensure_ascii=False).decode('utf8').encode('gb2312') =>{"a": "你好"}
Python3的預設編碼格式是utf-8,以上例子,只需要ensure_ascii=False,就能解決。
到此這篇關於Python操作JSON實現網路資料交換的文章就介紹到這了,更多相關 Python操作JSON 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45