当前位置: 首页 > news >正文

【Python】基础学习技能提升代码样例3:JSON文本处理

对json的处理,无非是编码和解码两部分

  • 编码:将python数据结构转换为json字符串
  • 解码: 将json字符串转换为python数据结构

另外,还有.json文件的读写

一、编码

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)
默认转换规则:

PythonJSON
dictobject – 对象
list, tuplearray
strstring
int, float, int 和 float 派生的枚举数字
Truetrue
Falsefalse
Nonenull
import json# 编码:将python对象,转为json对象字符串形式
a = {'fname' : 'Foo','lname' : 'Bar','email' : None,'children' : ['Moo','Koo','Roo']
}
print(a)json_str = json.dumps(a)
print(json_str)with open('data.json', 'w') as fh:fh.write(json_str)# dump 和dumps几乎一样,只不过只支持流式输出到文件或者其他stream
with open('data.json', 'w') as fh:json.dump(a, fh)

二、解码

json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

JSONPython
objectdict
arraylist
stringstr
number (int)int
number (real)float
trueTrue
falseFalse
nullNone
# Python 字典类型转换为 JSON 对象
data1 = {'no' : 1,'name' : 'Runoob','url' : 'http://www.runoob.com'
}json_str = json.dumps(data1)
print ("Python 原始数据:", repr(data1))
print ("JSON 对象:", json_str)# 将 JSON 对象转换为 Python 字典
data2 = json.loads(json_str)
print ("data2['name']: ", data2['name'])
print ("data2['url']: ", data2['url'])

三、 常用操作

常用操作通常就json元素的增删查改,原理就是先解码成python基本数据类型,修改好后再编码成json。

也有高效的增删查改库可以使用,比如jsonpath-ng

# json_str 增加字段age
data2["age"] = 12
json_str = json.dumps(data2) # 新json

四、 json文件读写

重要利用dumpload函数


py_data= {'no' : 1,'name' : 'Runoob','url' : 'http://www.runoob.com'
}# 写入
with open('data.json', 'w') as fh:json_str = json.dumps(py_data)fh.write(json_str)with open('data.json', 'w') as fh:json.dump(a, fh)# 读取
with open("./data.json", "r") as f:content = json.load(f)print(type(content)) # <class 'dict'>print(content)

参考

json模块
Python3 JSON 数据解析
jsonpath-ng

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计算机基础-IO
  • 【vluhub】elasticsearch漏洞
  • Android 基带版本号显示不正确,显示了多个一样的基带版本号
  • 【MySQL进阶之路 | 高级篇】事务的ACID特性
  • 【视频讲解】后端增删改查接口有什么用?
  • 最新风车IM即时聊天源码及完整视频教程2024年7月版
  • mac下010editor的配置文件路径
  • C/C++基础知识
  • 【JavaEE初阶】线程的概念及创建
  • java连接redis和基础操作命令
  • Redis(三)事务、管道、主从复制
  • 大语言模型-对比学习-Contrastive Learning
  • 昇思25天学习打卡营第10天|xiaoyushao
  • 中小企业常见的网络安全问题及防范措施
  • 【大师与bug里特】M_Studio《王国之梦》学习笔记
  • 时间复杂度分析经典问题——最大子序列和
  • 【EOS】Cleos基础
  • angular2 简述
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • HTML5新特性总结
  • magento2项目上线注意事项
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • php的插入排序,通过双层for循环
  • React的组件模式
  • Vue.js-Day01
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 闭包--闭包之tab栏切换(四)
  • 产品三维模型在线预览
  • 对象管理器(defineProperty)学习笔记
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 判断客户端类型,Android,iOS,PC
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何用vue打造一个移动端音乐播放器
  • 入门级的git使用指北
  • 算法-插入排序
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 责任链模式的两种实现
  • 怎样选择前端框架
  • 智能合约开发环境搭建及Hello World合约
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​ssh免密码登录设置及问题总结
  • ‌移动管家手机智能控制汽车系统
  • # .NET Framework中使用命名管道进行进程间通信
  • # Java NIO(一)FileChannel
  • #70结构体案例1(导师,学生,成绩)
  • #FPGA(基础知识)
  • #Linux(权限管理)
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #QT 笔记一
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (12)Linux 常见的三种进程状态
  • (C#)获取字符编码的类
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析