电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python 解析庫json及jsonpath pickle的實現

瀏覽:115日期:2022-07-13 17:21:25
1. 數據抽取的概念

Python 解析庫json及jsonpath pickle的實現

2. 數據的分類

Python 解析庫json及jsonpath pickle的實現

3. JSON數據概述及解析3.1 JSON數據格式

Python 解析庫json及jsonpath pickle的實現

3.2 解析庫json

json模塊是Python內置標準庫,主要可以完成兩個功能:序列化和反序列化。JSON對象和Python對象映射圖如下:

Python 解析庫json及jsonpath pickle的實現

3.2.1 json序列化

對象(字典/列表) 通過 json.dump()/json.dumps() ==> json字符串。示例代碼如下:

import jsonclass Phone(object): def __init__(self, name, price): self.name = name self.price = priceclass Default(json.JSONEncoder): def default(self, o): print(o) # o: <__main__.Phone object at 0x10aa52c90> return [o.name, o.price]def parse(obj): print(obj) return {'name': obj.name, 'price': obj.price}person_info_dict = { 'name': 'Amo', 'age': 18, 'is_boy': True, # 'n': float('nan'), # float('nan'):NaN float('inf')=>Infinity float('-inf')=>-Infinity 'phone': Phone('蘋果8plus', 6458), 'hobby': ('sing', 'dance'), 'dog': { 'name': '藏獒', 'age': 5, 'color': '棕色', 'isVIP': True, 'child': None },}'''obj:需要序列化的對象 字典/列表 這里指的是person_info_dictindent: 縮進 單位: 字符sort_keys: 是否按key排序 默認是False不排序cls: json.JSONEncoder子類 處理不能序列化的對象ensure_ascii: 是否確保ascii編碼 默認是True確保 '蘋果8plus'==>'u82f9u679c8plus' 所以改為Falsedefault: 對象不能被序列化時,調用對應的函數解析'''# 將結果返回給一個變量result = json.dumps(person_info_dict, indent=2, sort_keys=True, ensure_ascii=False, # cls=Default, default=parse, # allow_nan=False 是否處理特殊常量值 # 默認為True 但是JSON標準規范不支持NaN, Infinity和-Infinity )print(result)with open('dump.json', 'w', encoding='utf8') as file: # json.dump是將序列化后的內容存儲到文件中 其他參數用法和dumps一致 json.dump(person_info_dict, file, indent=4, ensure_ascii=False, default=parse)

3.2.2 json反序列化

json字符串通過json.load()/json.loads()==> 對象(字典/列表),示例代碼如下:

import jsonclass Phone(object): def __init__(self, name, price): self.name = name self.price = pricedef pi(num): return int(num) + 1def oh(dic): if 'price' in dic.keys(): return Phone(dic['name'], dic['price']) return dicdef oph(*args, **kwargs): print(*args, **kwargs)# 我自己本地有一個dump.json文件with open('dump.json', 'r', encoding='utf8') as file: # content = file.read() # parse_int/float: 整數/浮點數鉤子函數 # object_hook: 對象解析鉤子函數 將字典轉為特定對象 傳遞給函數的是字典對象 # object_pairs_hook: 轉化為特定對象 傳遞的是元組列表 # parse_constant: 常量鉤子函數 NaN/Infinity/-Infinity # result = json.loads(content, object_hook=oh, parse_int=pi, object_pairs_hook=oph) result = json.load(file, parse_int=pi, object_hook=oh) # 直接將文件對象傳入 print(type(result)) # <class ’dict’> print(result)4. jsonpath

jsonpath三方庫,點擊這里這里進入官網,通過路徑表達式,來快速獲取字典當中的指定數據,靈感來自xpath表達式。命令安裝:

pip install --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com jsonpath

或者:

Python 解析庫json及jsonpath pickle的實現

4.1 使用

語法格式如下:

from jsonpath import jsonpathdic = {....} # 要找數據的字典jsonpath(dic, 表達式)

常用的表達式語法如下:

JSONPath 描述 $ 根節點(假定的外部對象,可以理解為上方的dic) @ 現行節點(當前對象) .或者[] 取子節點(子對象) .. 就是不管位置,選擇所有符合條件的節點(后代對象) * 匹配所有元素節點 [] 迭代集合,謂詞條件,下標 [,] 多選 ?() 支持過濾操作 () 支持表達式操作 [start: end : step] 切片

4.2 使用示例

案例一用到的字典如下:

dic = { 'person': { 'name': 'Amo', 'age': 18, 'dog': [{ 'name': '小花', 'color': 'red', 'age': 6, 'isVIP': True }, { 'name': '小黑', 'color': 'black', 'age': 2 }] }}

將上述抽象成一個樹形結構如圖所示:

Python 解析庫json及jsonpath pickle的實現

需求及結果如下:

JSONPath Result $.person.age 獲取人的年齡 $..dog[1].age 獲取第2個小狗的年齡 $..dog[0,1].age | $..dog[*].age 獲取所有小狗的年齡 $..dog[?(@.isVIP)] 獲取是VIP的小狗 $..dog[?(@.age>2)] 獲取年齡大于2的小狗 $..dog[-1:] | $..dog[(@.length-1)] 獲取最后一個小狗

代碼如下:

from jsonpath import jsonpathdic = { 'person': { 'name': 'Amo', 'age': 18, 'dog': [{ 'name': '小花', 'color': 'red', 'age': 6, 'isVIP': True }, { 'name': '小黑', 'color': 'black', 'age': 2 }] }}# 1.獲取人的年齡print(jsonpath(dic, '$.person.age')) # 獲取到數據返回一個列表 否則返回False# 2.獲取第2個小狗的年齡print(jsonpath(dic, '$..dog[1].age'))# 3.獲取所有小狗的年齡print(jsonpath(dic, '$..dog[0,1].age'))print(jsonpath(dic, '$..dog[*].age'))# 4.獲取是VIP的小狗print(jsonpath(dic, '$..dog[?(@.isVIP)]'))# 5.獲取年齡大于2的小狗print(jsonpath(dic, '$..dog[?(@.age>2)]'))# 6.獲取最后一個小狗print(jsonpath(dic, '$..dog[-1:]'))print(jsonpath(dic, '$..dog[(@.length-1)]'))

上述代碼執行結果如下:

Python 解析庫json及jsonpath pickle的實現

案例二用到的字典如下:

book_dict = { 'store': { 'book': [ {'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95 }, {'category': 'fiction', 'author': 'Evelyn Waugh', 'title': 'Sword of Honour', 'price': 12.99 }, {'category': 'fiction', 'author': 'Herman Melville', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99 }, {'category': 'fiction', 'author': 'J. R. R. Tolkien', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99 } ], 'bicycle': { 'color': 'red', 'price': 19.95 } }}

將上述抽象成一個樹形結構如圖所示:

Python 解析庫json及jsonpath pickle的實現

需求及結果如下:

JSONPath Result $.store.book[*].author store中的所有的book的作者 $.store[*] store下的所有的元素 $..price store中的所有的內容的價格 $..book[2] 第三本書 $..book[(@.length-1)] 最后一本書 $..book[0:2] 前兩本書 $.store.book[?(@.isbn)] 獲取有isbn的所有書 $.store.book[?(@.price>10)] 獲取價格大于10的所有的書 $..* 獲取所有的數據

代碼如下:

from jsonpath import jsonpathbook_dict = { 'store': { 'book': [ {'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95 }, {'category': 'fiction', 'author': 'Evelyn Waugh', 'title': 'Sword of Honour', 'price': 12.99 }, {'category': 'fiction', 'author': 'Herman Melville', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99 }, {'category': 'fiction', 'author': 'J. R. R. Tolkien', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99 } ], 'bicycle': { 'color': 'red', 'price': 19.95 } }}# 1.store中的所有的book的作者print(jsonpath(book_dict, '$.store.book[*].author'))print(jsonpath(book_dict, '$..author'))# 2.store下的所有的元素print(jsonpath(book_dict, '$.store[*]'))print(jsonpath(book_dict, '$.store.*'))# 3.store中的所有的內容的價格print(jsonpath(book_dict, '$..price'))# 4.第三本書print(jsonpath(book_dict, '$..book[2]'))# 5.最后一本書print(jsonpath(book_dict, '$..book[-1:]'))print(jsonpath(book_dict, '$..book[(@.length-1)]'))# 6.前兩本書print(jsonpath(book_dict, '$..book[0:2]'))# 7.獲取有isbn的所有書print(jsonpath(book_dict, '$.store.book[?(@.isbn)]'))# 8.獲取價格大于10的所有的書print(jsonpath(book_dict, '$.store.book[?(@.price>10)]'))# 9.獲取所有的數據print(jsonpath(book_dict, '$..*'))5. Python專用JSON解析庫pickle

pickle處理的json對象不通用,可以額外的把函數給序列化。示例代碼如下:

import pickledef eat(): print('Amo在努力地寫博客~')person_info_dict = { 'name': 'Amo', 'age': 18, 'eat': eat}# print(pickle.dumps(person_info_dict))with open('pickle_json', 'wb') as file: pickle.dump(person_info_dict, file)with open('pickle_json', 'rb') as file: result = pickle.load(file) result['eat']()JsonPath與XPath語法對比:

Json結構清晰,可讀性高,復雜度低,非常容易匹配,下表中對應了XPath的用法。

XPath JSONPath 描述 / $ 根節點 . @ 現行節點 / .or[] 取子節點 .. n/a 取父節點,Jsonpath未支持 // .. 就是不管位置,選擇所有符合條件的條件 * * 匹配所有元素節點 @ n/a 根據屬性訪問,Json不支持,因為Json是個Key-value遞歸結構,不需要。 [] [] 迭代器標示(可以在里邊做簡單的迭代操作,如數組下標,根據內容選值等) | [,] 支持迭代器中做多選。 [] ?() 支持過濾操作. n/a () 支持表達式計算 () n/a 分組,JsonPath不支持

到此這篇關于Python 解析庫json及jsonpath pickle的實現的文章就介紹到這了,更多相關Python 解析庫json及jsonpath pickle內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 升降机-高空作业车租赁-蜘蛛车-曲臂式伸缩臂剪叉式液压升降平台-脚手架-【普雷斯特公司厂家】 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 法兰螺母 - 不锈钢螺母制造厂家 - 万千紧固件--螺母街 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 上海租奔驰_上海租商务车_上海租车网-矢昂汽车服务公司 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 代理记账_公司起名核名_公司注册_工商注册-睿婕实业有限公司 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 山东信蓝建设有限公司官网 | 浙江自考_浙江自学考试网| 工业rfid读写器_RFID工业读写器_工业rfid设备厂商-ANDEAWELL | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 课件导航网_ppt课件_课件模板_课件下载_最新课件资源分享发布平台 | 政府园区专业委托招商平台_助力企业选址项目快速落地_东方龙商务集团 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | OpenI 启智 新一代人工智能开源开放平台 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 立式_复合式_壁挂式智能化电伴热洗眼器-上海达傲洗眼器生产厂家 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 乐之康护 - 专业护工服务平台,提供医院陪护-居家照护-居家康复 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 热回收盐水机组-反应釜冷水机组-高低温冷水机组-北京蓝海神骏科技有限公司 | 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 挤塑板-XPS挤塑板-挤塑板设备厂家[襄阳欧格] | 承插管件_不锈钢承插管件_锻钢高压管件-温州科正阀门管件有限公司 |