日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Python如何讀取、寫入JSON數(shù)據(jù)

瀏覽:112日期:2022-07-16 10:36:37

問題

你想讀寫JSON(JavaScript Object Notation)編碼格式的數(shù)據(jù)。

解決方案

json 模塊提供了一種很簡單的方式來編碼和解碼JSON數(shù)據(jù)。其中兩個主要的函數(shù)是 json.dumps() 和 json.loads() ,要比其他序列化函數(shù)庫如pickle的接口少得多。下面演示如何將一個Python數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為JSON:

import jsondata = { ’name’ : ’ACME’, ’shares’ : 100, ’price’ : 542.23}json_str = json.dumps(data)

下面演示如何將一個JSON編碼的字符串轉(zhuǎn)換回一個Python數(shù)據(jù)結(jié)構(gòu):

data = json.loads(json_str)

如果你要處理的是文件而不是字符串,你可以使用json.dump()和json.load()來編碼和解碼JSON數(shù)據(jù)。例如:

# Writing JSON datawith open(’data.json’, ’w’) as f: json.dump(data, f)# Reading data backwith open(’data.json’, ’r’) as f: data = json.load(f)

討論

JSON編碼支持的基本數(shù)據(jù)類型為None,bool,int,float和str,以及包含這些類型數(shù)據(jù)的lists,tuples和dictionaries。對于dictionaries,keys需要是字符串類型(字典中任何非字符串類型的key在編碼時會先轉(zhuǎn)換為字符串)。為了遵循JSON規(guī)范,你應(yīng)該只編碼Python的lists和dictionaries。而且,在web應(yīng)用程序中,頂層對象被編碼為一個字典是一個標(biāo)準(zhǔn)做法。

JSON編碼的格式對于Python語法而已幾乎是完全一樣的,除了一些小的差異之外。比如,True會被映射為true,F(xiàn)alse被映射為false,而None會被映射為null。下面是一個例子,演示了編碼后的字符串效果:

>>> json.dumps(False)’false’>>> d = {’a’: True,... ’b’: ’Hello’,... ’c’: None}>>> json.dumps(d)’{'b': 'Hello', 'c': null, 'a': true}’>>>

如果你試著去檢查JSON解碼后的數(shù)據(jù),你通常很難通過簡單的打印來確定它的結(jié)構(gòu),特別是當(dāng)數(shù)據(jù)的嵌套結(jié)構(gòu)層次很深或者包含大量的字段時。為了解決這個問題,可以考慮使用pprint模塊的 pprint() 函數(shù)來代替普通的 print() 函數(shù)。它會按照key的字母順序并以一種更加美觀的方式輸出。下面是一個演示如何漂亮的打印輸出Twitter上搜索結(jié)果的例子:

>>> from urllib.request import urlopen>>> import json>>> u = urlopen(’http://search.twitter.com/search.json?q=python&rpp=5’)>>> resp = json.loads(u.read().decode(’utf-8’))>>> from pprint import pprint>>> pprint(resp){’completed_in’: 0.074,’max_id’: 264043230692245504,’max_id_str’: ’264043230692245504’,’next_page’: ’?page=2&max_id=264043230692245504&q=python&rpp=5’,’page’: 1,’query’: ’python’,’refresh_url’: ’?since_id=264043230692245504&q=python’,’results’: [{’created_at’: ’Thu, 01 Nov 2012 16:36:26 +0000’, ’from_user’: ... }, {’created_at’: ’Thu, 01 Nov 2012 16:36:14 +0000’, ’from_user’: ... }, {’created_at’: ’Thu, 01 Nov 2012 16:36:13 +0000’, ’from_user’: ... }, {’created_at’: ’Thu, 01 Nov 2012 16:36:07 +0000’, ’from_user’: ... } {’created_at’: ’Thu, 01 Nov 2012 16:36:04 +0000’, ’from_user’: ... }],’results_per_page’: 5,’since_id’: 0,’since_id_str’: ’0’}>>>

一般來講,JSON解碼會根據(jù)提供的數(shù)據(jù)創(chuàng)建dicts或lists。如果你想要創(chuàng)建其他類型的對象,可以給 json.loads() 傳遞object_pairs_hook或object_hook參數(shù)。例如,下面是演示如何解碼JSON數(shù)據(jù)并在一個OrderedDict中保留其順序的例子:

>>> s = ’{'name': 'ACME', 'shares': 50, 'price': 490.1}’>>> from collections import OrderedDict>>> data = json.loads(s, object_pairs_hook=OrderedDict)>>> dataOrderedDict([(’name’, ’ACME’), (’shares’, 50), (’price’, 490.1)])>>>

下面是如何將一個JSON字典轉(zhuǎn)換為一個Python對象例子:

>>> class JSONObject:... def __init__(self, d):... self.__dict__ = d...>>>>>> data = json.loads(s, object_hook=JSONObject)>>> data.name’ACME’>>> data.shares50>>> data.price490.1>>>

最后一個例子中,JSON解碼后的字典作為一個單個參數(shù)傳遞給 __init__() 。然后,你就可以隨心所欲的使用它了,比如作為一個實(shí)例字典來直接使用它。

在編碼JSON的時候,還有一些選項(xiàng)很有用。如果你想獲得漂亮的格式化字符串后輸出,可以使用 json.dumps() 的indent參數(shù)。它會使得輸出和pprint()函數(shù)效果類似。比如:

>>> print(json.dumps(data)){'price': 542.23, 'name': 'ACME', 'shares': 100}>>> print(json.dumps(data, indent=4)){ 'price': 542.23, 'name': 'ACME', 'shares': 100}>>>

對象實(shí)例通常并不是JSON可序列化的。例如:

>>> class Point:... def __init__(self, x, y):... self.x = x... self.y = y...>>> p = Point(2, 3)>>> json.dumps(p)Traceback (most recent call last): File '<stdin>', line 1, in <module> File '/usr/local/lib/python3.3/json/__init__.py', line 226, in dumps return _default_encoder.encode(obj) File '/usr/local/lib/python3.3/json/encoder.py', line 187, in encode chunks = self.iterencode(o, _one_shot=True) File '/usr/local/lib/python3.3/json/encoder.py', line 245, in iterencode return _iterencode(o, 0) File '/usr/local/lib/python3.3/json/encoder.py', line 169, in default raise TypeError(repr(o) + ' is not JSON serializable')TypeError: <__main__.Point object at 0x1006f2650> is not JSON serializable>>>

如果你想序列化對象實(shí)例,你可以提供一個函數(shù),它的輸入是一個實(shí)例,返回一個可序列化的字典。例如:

def serialize_instance(obj): d = { ’__classname__’ : type(obj).__name__ } d.update(vars(obj)) return d

如果你想反過來獲取這個實(shí)例,可以這樣做:

# Dictionary mapping names to known classesclasses = { ’Point’ : Point}def unserialize_object(d): clsname = d.pop(’__classname__’, None) if clsname: cls = classes[clsname] obj = cls.__new__(cls) # Make instance without calling __init__ for key, value in d.items(): setattr(obj, key, value) return obj else: return d

下面是如何使用這些函數(shù)的例子:

>>> p = Point(2,3)>>> s = json.dumps(p, default=serialize_instance)>>> s’{'__classname__': 'Point', 'y': 3, 'x': 2}’>>> a = json.loads(s, object_hook=unserialize_object)>>> a<__main__.Point object at 0x1017577d0>>>> a.x2>>> a.y3>>>

json 模塊還有很多其他選項(xiàng)來控制更低級別的數(shù)字、特殊值如NaN等的解析??梢詤⒖脊俜轿臋n獲取更多細(xì)節(jié)。

以上就是Python如何讀取、寫入JSON數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于Python讀寫json數(shù)據(jù)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区三区精品在线观看| 91视频久久| 欧美成人精品一级| 亚洲精品婷婷| 久久国产精品99国产| 99精品小视频| 成人台湾亚洲精品一区二区| 亚洲我射av| 亚洲国产一区二区三区在线播放 | 涩涩涩久久久成人精品| 国产精品成久久久久| 国产精品欧美三级在线观看| 亚洲精品高潮| 国产视频欧美| 在线成人动漫av| 伊人久久高清| 精品国产亚洲一区二区三区大结局| 日韩区一区二| 日韩中文字幕一区二区高清99| 精品日韩毛片| 亚洲天堂一区二区| 国产中文在线播放| 国产va免费精品观看精品视频| 麻豆一区二区三| 久久精品国产久精国产爱| 69堂精品视频在线播放| 日韩精品成人在线观看| 青青伊人久久| 久久99蜜桃| 国产aa精品| 在线手机中文字幕| 免费亚洲婷婷| 精品国产91| 91视频一区| 日韩精品一区二区三区免费观影 | 国产日韩欧美一区二区三区在线观看| 综合干狼人综合首页| 国产午夜久久| 日韩专区在线视频| 亚洲一区二区av| 日韩国产欧美在线播放| 日本天堂一区| 久久精品资源| 日韩一区二区三区免费播放| 久久网站免费观看| 99香蕉国产精品偷在线观看| 亚洲一区二区三区高清不卡| 久久成人亚洲| 欧美一区影院| 国产一区二区三区亚洲综合| 欧美激情福利| 欧美日韩国产v| 9久re热视频在线精品| 另类激情亚洲| 91成人精品观看| 精品一区二区三区在线观看视频 | 亚洲激情婷婷| 亚洲综合色婷婷在线观看| 日韩视频一区二区三区在线播放免费观看| 91九色精品| 亚洲久久在线| 国产精品欧美日韩一区| 日韩欧美二区| 亚洲欧洲美洲av| 亚洲天堂久久| 亚洲欧美日本国产| 久久伊人亚洲| 欧美精品激情| 国产精品一区免费在线| www成人在线视频| 日日夜夜免费精品| 国产精品国产三级在线观看| 日韩欧美中文| 日韩精品久久久久久久软件91| 国产一区二区三区四区| 一区在线免费| 国产精品一线| 日韩一区电影| 日韩午夜精品| 国产日产一区| 久久国产中文字幕| 日韩在线黄色| av中文资源在线资源免费观看| 欧美日韩国产免费观看| 91精品国产自产精品男人的天堂| 国产999精品在线观看| 久久国产精品毛片| 精品一区二区三区中文字幕视频| 六月婷婷一区| 久久青青视频| 亚洲免费毛片| 欧美日韩在线观看视频小说| 一区二区国产在线| 国产福利资源一区| 在线亚洲免费| 黄色网一区二区| 石原莉奈在线亚洲二区| 久久精品播放| 一区二区三区四区日本视频| 国产欧美综合一区二区三区| 免费在线观看视频一区| 私拍精品福利视频在线一区| 亚洲一区二区动漫| 欧美成人综合| 日本久久成人网| 精品九九在线| 国产精品宾馆| 日韩福利在线观看| 久久最新视频| 亚洲精品91| 欧美日韩中文字幕一区二区三区| а√在线中文在线新版| 久久不卡日韩美女| 国产精品美女在线观看直播| 国产精品亚洲综合色区韩国| 日本在线不卡视频一二三区| 美女91精品| 免费的成人av| 亚洲另类视频| 日韩av一二三| 国产精品一区二区三区av麻| 国产日韩一区二区三区在线 | 日本麻豆一区二区三区视频| 中文字幕免费一区二区| 久久亚洲影院| 中文不卡在线| 日本亚洲最大的色成网站www| 免费在线观看成人| 在线一区欧美| 伊人精品视频| 99亚洲视频| 久久精品免费一区二区三区| 蜜臀国产一区| 国产成人精品三级高清久久91| 日韩精品成人在线观看| 日韩国产一二三区| 午夜亚洲福利在线老司机| 亚洲精品.com| 亚洲三级观看| 亚洲综合专区| 亚洲免费网址| 一区三区视频| 99成人在线| 一本色道久久精品| 亚洲精品一级| 少妇精品久久久一区二区| 亚洲欧美日韩精品一区二区| 欧美国产91| 蜜桃成人av| 亚洲一区二区日韩| 亚洲区国产区| 六月婷婷一区| 夜夜嗨一区二区三区| 午夜久久99| 国产午夜精品一区二区三区欧美| 婷婷精品视频| 91久久久久| 久久午夜精品一区二区| 三级一区在线视频先锋| 国产一级久久| 日韩一区精品视频| 亚洲视频电影在线| 国产精品nxnn| 美女视频黄 久久| 精品久久网站| 97精品国产福利一区二区三区| 国产精品久久| 国产一区二区三区日韩精品| 国产91久久精品一区二区| 欧美啪啪一区| 国产美女亚洲精品7777| av亚洲一区二区三区| 日韩欧美二区| 免费观看不卡av| 日韩国产在线一| 日本视频在线一区| 亚洲在线观看| 蜜臀av在线播放一区二区三区| 国产在线不卡一区二区三区| 久久男人av| 亚洲精品少妇| 香蕉精品视频在线观看| 国产精品美女在线观看直播| 欧美日韩黑人| 日韩欧美精品一区二区综合视频| 国产精久久一区二区| 亚洲第一区色| 中文字幕日韩高清在线| 久久狠狠久久| 中文另类视频| 91精品国产成人观看| 亚洲三级国产| 久久蜜桃精品| 久久永久免费| 国产农村妇女精品一区二区| 国产精品自在| 午夜在线精品偷拍| 亚洲欧洲高清| 欧美日本三区| 国产亚洲欧美日韩在线观看一区二区|