深入理解Python对Json的解析
发布时间 - 2026-01-10 23:02:40 点击率:次Json简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
它的格式一般是这样的:
对象是一个无序的“‘名称/值'对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值' 对”之间使用“,”(逗号)分隔。
例如下面这样:
{"b": "Hello", "c": null, "a": true}
它的值可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
使用Python编码和解析Json
Python内置了json包来帮助我们完成对json的操作。
将Python的字典结构导出到json使用json.dumps() ,将json读成Python的字典结构,使用json.loads() 。
如果不是针对string操作而是对文件操作,分别使用json.load()函数和json.dump()函数。
import json
data = {
'name' : 'ACME',
'shares' : 100,
'price' : 542.23
}
json_str = json.dumps(data)
data = json.loads(json_str)
# Writing JSON data to file
with open('data.json', 'w') as f:
json.dump(data, f)
# Reading data back
with open('data.json', 'r') as f:
data = json.load(f)
默认的类型对应如下:
| JSON | Python |
|---|---|
| object | dict |
| array | list |
| string | unicode |
| number (int) | int, long |
| number (real) | float |
| true | True |
| false | False |
| null | None |
其他数据类型与Json之间的编码和解码
一般来说,Python对json的解析是list或dict之间的操作,如果需要其他类型与json之间转换,就需要object_hook参数。先定义一个类,将类的字典初始化成json的key-value键值对。这样,json的参数就变成了类的属性。
将一个JSON字典转换为一个Python对象Python
>>> class JSONObject: ... def __init__(self, d): ... self.__dict__ = d ... >>> >>> data = json.loads(s, object_hook=JSONObject) >>> data.name 'ACME' >>> data.shares 50 >>> data.price 490.1
还可以通过指定“函数”来进行转换。
用函数来指定序列化的方法,即将对象的“属性-值”对变成字典对,函数返回一个字典,然后json.dumps会格式化这个字典。
如果是通过函数将json变成对象,首先获得类名,然后通过__new__来创建一个对象(不调用初始化函数),然后将json字典的各个属性赋给对象。
使用函数指定json转换方式Python
def serialize_instance(obj):
d = { '__classname__' : type(obj).__name__ }
d.update(vars(obj))
return d
# Dictionary mapping names to known classes
classes = {
'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
使用方法如下:
>>> 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.x
2
>>> a.y
3
总结
以上就是关于Python对Json解析的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流。
# python对json解析
# python
# json解析
# 解析json文件
# 使用Python解析JSON数据的基本方法
# python解析json实例方法
# Python读取JSON数据操作实例解析
# 深入解析Python编程中JSON模块的使用
# python中解析json格式文件的方法示例
# Python解析JSON数据的方法简单例子
# 数据交换
# 是一个
# 双引号
# 是一种
# 还可以
# 是这样
# 用了
# 如果不是
# 类似于
# 转换为
# 也使
# 创建一个
# 键值
# 方法如下
# 变成了
# 序列化
# 读成
# 导出到
# 内置了
# 有疑问
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在新浪SAE免费搭建个人博客?
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
JavaScript如何操作视频_媒体API怎么控制播放
微信小程序 HTTPS报错整理常见问题及解决方案
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
网站页面设计需要考虑到这些问题
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
如何用5美元大硬盘VPS安全高效搭建个人网站?
如何在云主机上快速搭建网站?
PHP 500报错的快速解决方法
如何在万网ECS上快速搭建专属网站?
微信小程序 闭包写法详细介绍
如何在橙子建站上传落地页?操作指南详解
香港网站服务器数量如何影响SEO优化效果?
使用Dockerfile构建java web环境
太平洋网站制作公司,网络用语太平洋是什么意思?
如何为不同团队 ID 动态生成多个独立按钮
黑客入侵网站服务器的常见手法有哪些?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何制作一个表白网站视频,关于勇敢表白的小标题?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
zabbix利用python脚本发送报警邮件的方法
如何在景安云服务器上绑定域名并配置虚拟主机?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
制作公司内部网站有哪些,内网如何建网站?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
昵图网官网入口 昵图网素材平台官方入口
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
高防服务器租用如何选择配置与防御等级?
如何在云虚拟主机上快速搭建个人网站?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
如何用已有域名快速搭建网站?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
如何快速搭建高效WAP手机网站吸引移动用户?
Laravel如何与Pusher实现实时通信?(WebSocket示例)
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
智能起名网站制作软件有哪些,制作logo的软件?
高防服务器:AI智能防御DDoS攻击与数据安全保障
南京网站制作费用,南京远驱官方网站?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Swift开发中switch语句值绑定模式
如何快速搭建自助建站会员专属系统?
如何确保西部建站助手FTP传输的安全性?

