成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

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

問(wèn)題

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

解決方案

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

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

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

data = json.loads(json_str)

如果你要處理的是文件而不是字符串,你可以使用json.dump()和json.load()來(lái)編碼和解碼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。對(duì)于dictionaries,keys需要是字符串類型(字典中任何非字符串類型的key在編碼時(shí)會(huì)先轉(zhuǎn)換為字符串)。為了遵循JSON規(guī)范,你應(yīng)該只編碼Python的lists和dictionaries。而且,在web應(yīng)用程序中,頂層對(duì)象被編碼為一個(gè)字典是一個(gè)標(biāo)準(zhǔn)做法。

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

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

如果你試著去檢查JSON解碼后的數(shù)據(jù),你通常很難通過(guò)簡(jiǎn)單的打印來(lái)確定它的結(jié)構(gòu),特別是當(dāng)數(shù)據(jù)的嵌套結(jié)構(gòu)層次很深或者包含大量的字段時(shí)。為了解決這個(gè)問(wèn)題,可以考慮使用pprint模塊的 pprint() 函數(shù)來(lái)代替普通的 print() 函數(shù)。它會(huì)按照key的字母順序并以一種更加美觀的方式輸出。下面是一個(gè)演示如何漂亮的打印輸出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’}>>>

一般來(lái)講,JSON解碼會(huì)根據(jù)提供的數(shù)據(jù)創(chuàng)建dicts或lists。如果你想要?jiǎng)?chuàng)建其他類型的對(duì)象,可以給 json.loads() 傳遞object_pairs_hook或object_hook參數(shù)。例如,下面是演示如何解碼JSON數(shù)據(jù)并在一個(gè)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)])>>>

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

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

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

在編碼JSON的時(shí)候,還有一些選項(xiàng)很有用。如果你想獲得漂亮的格式化字符串后輸出,可以使用 json.dumps() 的indent參數(shù)。它會(huì)使得輸出和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}>>>

對(duì)象實(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>>>

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

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

如果你想反過(guò)來(lái)獲取這個(gè)實(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)來(lái)控制更低級(jí)別的數(shù)字、特殊值如NaN等的解析。可以參考官方文檔獲取更多細(xì)節(jié)。

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

標(biāo)簽: Python 編程
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
影音先锋亚洲一区| 日韩一区二区三区四区| 国产精品久久一区二区三区| 91精品国产乱码久久蜜臀| 一区二区欧美视频| 国产精品观看| 欧美一区二区三区日韩| 国产精品久久久久久久久动漫 | 大桥未久av一区二区三区中文| 色久优优欧美色久优优| 日韩伦理免费电影| 91啪在线观看| 日韩女优毛片在线| 精品一区二区三区欧美| 欧美日韩福利| 欧美大片国产精品| 国产一区二区三区在线看麻豆| 99久久99久久综合| 在线成人小视频| 美女视频黄a大片欧美| 合欧美一区二区三区| 久久噜噜亚洲综合| 国产成人自拍高清视频在线免费播放| 欧美色手机在线观看| 国产美女一区二区| 精品国产免费久久| 欧美不卡一区| 亚洲人成网站色在线观看| 亚洲一区二区免费看| 亚洲国产成人高清精品| 在线观看亚洲一区| 久久99国产精品尤物| 91精品国产一区二区| 99视频在线精品| 国产精品第13页| 国产女主播一区二区| 麻豆精品在线播放| 欧美一区二区视频在线观看2020| 丁香桃色午夜亚洲一区二区三区| 久久久99精品免费观看| 国内精品视频在线播放| 亚洲自拍偷拍麻豆| 欧美在线免费观看亚洲| 国产高清亚洲一区| 久久久国产一区二区三区四区小说| 国产精品国产一区二区| 亚洲一区二区精品久久av| 欧美图区在线视频| 大尺度一区二区| 一区精品在线播放| 色一情一乱一乱一91av| 国产成人av福利| 国产精品久久久久天堂| 久久久久欧美精品| 高清不卡一区二区| 国产精品久久久久久久久免费樱桃| 免费欧美日韩| 国产成人亚洲综合a∨猫咪| 欧美激情艳妇裸体舞| 99视频+国产日韩欧美| 久久不见久久见免费视频7| 精品91自产拍在线观看一区| 亚洲午夜精品久久| 喷白浆一区二区| 国产精品一区一区三区| 久久一二三四| 男人操女人的视频在线观看欧美 | 欧美日韩系列| 国产精品99免费看| 欧美精品一级二级三级| 午夜日韩在线电影| 国产精品人成在线观看免费| 亚洲人成在线播放网站岛国| 久久99久久99| 久久新电视剧免费观看| 国产亚洲一区二区三区在线播放| 久久精品免费观看| 久久精品视频免费观看| 性8sex亚洲区入口| 成人av在线影院| 亚洲最色的网站| 91麻豆精品国产91久久久资源速度| 国产精品麻豆99久久久久久| 一区二区视频在线观看| 亚洲人亚洲人成电影网站色| 在线亚洲+欧美+日本专区| av一二三不卡影片| 亚洲成av人影院在线观看网| 欧美老肥妇做.爰bbww| 激情亚洲成人| 国产精一品亚洲二区在线视频| 中文字幕亚洲区| 欧美三级中文字幕在线观看| 欧美日韩精品免费观看| 久久精品国产色蜜蜜麻豆| 国产精品青草久久| 欧美另类变人与禽xxxxx| 欧美日韩三区| 久久疯狂做爰流白浆xx| 国产精品麻豆99久久久久久| 欧美日韩综合色| 伊人久久婷婷| 国产成人av电影在线观看| 亚洲一卡二卡三卡四卡五卡| 亚洲精品一区二区三区福利| 久久岛国电影| 亚洲欧美综合国产精品一区| 精品一区二区免费看| 亚洲黄色录像片| 久久亚洲精品小早川怜子| 色88888久久久久久影院按摩| 欧美承认网站| 国产精品99久久久久久似苏梦涵| 一区二区三区**美女毛片| 精品国产乱码久久久久久久| 久久久久一区| 亚洲午夜高清视频| 成人午夜电影网站| 日本午夜精品一区二区三区电影| 国产女同性恋一区二区| 欧美美女黄视频| 欧美亚洲三区| 欧美日韩国产欧| 成人永久免费视频| 日本aⅴ亚洲精品中文乱码| 亚洲三级电影网站| 久久久久国产精品麻豆ai换脸| 欧美日韩三级一区| 久久久久久亚洲精品不卡4k岛国| 亚洲性感激情| 99久久婷婷国产| 韩国成人在线视频| 日韩av中文字幕一区二区三区| 中文字幕制服丝袜成人av| 26uuu国产在线精品一区二区| 欧美日韩一区不卡| 美女爽到呻吟久久久久| 在线日韩电影| 欧美高清日韩| 99r国产精品| 岛国av在线一区| 国产在线一区观看| 日韩成人av影视| 亚洲成国产人片在线观看| 亚洲青青青在线视频| 国产精品日韩成人| 国产欧美精品在线观看| 精品久久久久99| 欧美精品三级日韩久久| 久久综合九色综合欧美狠狠| 一本久道久久综合狠狠爱| 一区二区亚洲精品| 很黄很黄激情成人| 国产一区二区三区无遮挡| 欧美激情视频一区二区三区免费| 91香蕉视频在线| 99精品视频在线播放观看| 成人免费毛片高清视频| 国产99久久久国产精品免费看| 韩国v欧美v日本v亚洲v| 紧缚捆绑精品一区二区| 麻豆一区二区在线| 麻豆精品在线播放| 日韩影视精彩在线| 五月天视频一区| 婷婷成人综合网| 日韩有码一区二区三区| 日韩高清在线电影| 免费高清在线视频一区·| 男男gaygay亚洲| 美女视频黄a大片欧美| 狂野欧美性猛交blacked| 精品一区二区三区不卡| 国产一区二区三区在线观看免费视频| 激情文学综合网| 国产二区国产一区在线观看| 国产成人免费在线视频| 丁香另类激情小说| 成人福利视频网站| 99久久伊人网影院| 欧美激情第二页| 亚洲视频福利| 中文网丁香综合网| 久久久久久一区| 在线观看成人免费视频| 在线电影院国产精品| 欧美大片一区二区三区| 久久久噜噜噜久久人人看 | 欧美一区二区成人6969| 日韩免费看的电影| 久久女同性恋中文字幕| 久久久久久久久97黄色工厂| 中文字幕av一区 二区| 亚洲精品一二三| 亚洲mv大片欧洲mv大片精品| 午夜精品免费在线| 久久aⅴ国产欧美74aaa| 高清国产一区二区| 欧美一区激情| 亚洲国产精品第一区二区三区|