javascript
【Python进阶】_JSON
JSON是什么
JSON (JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。
它是 javascript 規范里面定義的。 它是一種文本格式來存儲和表示數據。
它的特點就是 簡潔 并且 清晰, 人都能很容易的看明白。
JSON作用
把程序的各種類型數據對象變成表示該數據對象的字節串 這個過程 稱之為?序列化?。
而把 字節串轉化為 程序中的數據對象 這個過程 稱之為?反序列化
就好像 兩個人聊天時,雙方需要把自己腦子中的事物轉化為語言描述傳遞給對方, 接收到對方的語言描述,再轉化為自己的腦子中的事物一樣。JSON在這個過程中就相當于雙方都可以理解的語言,有著公用的標準與規范。
Python中轉換成JSON格式
Python中內置了json這個庫,可以 方便的把內置的數據對象 序列化為json格式文本的字符串。
把上面的數據對象序列化為json格式的字符串,就可以使用該庫里面的dumps函數,如下
import json historyTransactions = [{'time' : '20170101070311', # 交易時間'amount' : '3088', # 交易金額'productid' : '45454455555', # 貨號'productname' : 'iphone7' # 貨名},{'time' : '20170101050311', # 交易時間'amount' : '18', # 交易金額'productid' : '453455772955', # 貨號'productname' : '奧妙洗衣液' # 貨名}]jsonstr=json.dumps(historyTransactions,ensure_ascii=False,indent=4) print(jsonstr)輸出結果:
[{"time": "20170101070311","amount": "3088","productid": "45454455555","productname": "iphone7"},{"time": "20170101050311","amount": "18","productid": "453455772955","productname": "奧妙洗衣液"} ]語句解釋:JSON默認把非ASCII碼的字符轉換為unicode表示,ensure_ascii=False表示轉換中文時不按Unicode表示,輸出原來中文;indent=4表示轉換后縮進為4,這樣顯得整潔好看
Python中接收JSON模式
接收方如果也是Python開發的,可以使用 json庫中的 loads方法,把json格式的字符串變為 Python中的數據對象,如下
import json jsonstr = '[{"time": "20170101070311", "amount": "3088", "productid": "45454455555", "productname": "iphone7"}, {"time": "20170101050311", "amount": "18", "productid": "453455772955", "productname": "\u5965\u5999\u6d17\u8863\u6db2"}]'translist = json.loads(jsonstr) print(translist) print(type(translist))輸出結果:
[{'time': '20170101070311', 'amount': '3088', 'productid': '45454455555', 'productname': 'iphone7'}, {'time': '20170101050311', 'amount': '18', 'productid': '453455772955', 'productname': '奧妙洗衣液'}] <class 'list'>可以發現,確實轉變成為了list對象。
這樣接收方程序就可以方便的處理里面的數據了。
對象深拷貝
先看下面一段代碼:
eam1 = [{'name':'喬丹','height':'198'},{'name':'姚明','height':'223'} ]team2 = team1 team2[0]['name'] = '麥迪' print(team1[0]['name'])輸出結果:麥迪
在上面一段代碼中我們想把從team1中拷貝過來的team2做一些改動而不影響原有的team1數據,按照上面的方式,在改完后我們發現team1中的數據也相應發生了變化。這是因為當我們把team1賦值給team2時,不是重新開辟一個存儲空間存放team1的內容,而是相當于在team2中存放了team1內容的地址,所以改動team2中的內容,其實在改變了這個地址中的內容,team1自然也就相應發生了變化。
為了解決我們的問題,我們可用JSON來完成對象深拷貝,代碼如下:
team1 = [{'name':'喬丹','height':'198'},{'name':'姚明','height':'223'} ]import json team2 = json.loads(json.dumps(team1))team2[0]['name'] = '麥迪' print(team1[0]['name'])輸出結果:喬丹
解釋:我們先把team1數據內容轉換成JSON格式,再把它轉換成python內部數據格式保存在team2中,會重新開辟一個新的地址存放數據。
總結
以上是生活随笔為你收集整理的【Python进阶】_JSON的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【图像处理opencv】_Jupyter
- 下一篇: 【图像处理opencv】_简单绘图
