如何将json数据转换为python数据


Posted in Python onSeptember 04, 2020

JSON对象是javascript object即javascript中的对象,是一种通用的格式,格式严格,不支持备注。

JSON文本和JSON对象的区别:

  • JSON文本是符合JSON格式的文本,实际上是一个字符串
  • JSON对象是内存中一个对象,拥有属性和方法,可以通过对象获取其中的参数信息

Python中我们一般提到JSON对象指的是字典

Python的字典的格式和JSON格式,稍有不同:

  • 字典中的引号支持单引号和双引号,JSON格式只支持双引号
  • 字典中的True/False首字母大写,JSON格式为true/false
  • 字典中的空值为None, JSON格式为null

json 是数据存储和交换文本信息的语法

javaScript对象表示法

用于数据传递

json中的数据格式 python中的数据
数字 整型 浮点数
字符串 字符串
布尔值 true false True False
数组 列表。元祖
对象 字典
null None

常见的json数据格式

{
code:200,
values:[
{"name":'lal','age':20}]
}

{} josn数据对应json对象

[] josn数组

代码如下

import json
age = 10
#dumps把数据转化为json语法中的数值数据
json_data = json.dumps(age)
print(json_data)

name = '橙子'
json_dta =json.dumps(name)
print(json_data)

person ={"chinese":99}
json_data =json.dumps(person)
print(json_data)



#在python中可自定义类型 自定义的类型 在json中没有对应的数据格式
#需要制定编码规则 通过编码规则 将自定义类型的数据转换为json可识别的数据
class Person():
  def __init__(self,name):
    self.name = name
  def __str__(self):
    return f"Person(name={self.name})"
  #__repr__通过容器调用对象调用__repr__
  #__str__当打印对象时输出设定的格式信息
  __repr__ =__str__

p = Person("橙子")
print(p)
print(type(p))#<class '__main__.Person'>
#在json中无对应数据

#存储Person类型的数据-需获取json可识别数据格式
#方式1
#对象__dict__获取对象的特征信息以字典形式存储
json_data = json.dumps(p.__dict__)
print(json_data)#{"name": "\u6a59\u5b50"}
#本质上存储的是字典

#loads解析为json数据
python_data =json.loads(json_data)
print(python_data)

#对应对象为Person对象 需要根据数据信息创建对象
p = Person(python_data["name"])
print(p,type(p))#Person(name=橙子) <class '__main__.Person'>

#方法二存储时设置编码规则 存的是指定的编码规则数据
#获取的时候要对应有一个解码规则 在根据数据解析成对象
#对以上操作封装
#PersonEncoder编码
class PersonEncoder(json.JSONEncoder):
  #重写方法
  #这个方法在dumps时 内部自动调用
  #子类重写父类的方法 子类对党调用时 只能调用重写 因为会吧父类方法覆盖
  def default(self, o):
    #把规则写出来
    #o 表示要进行json转换的对象
    return o.__dict__
P =Person('橙子2')
#CLS制定编码规则
#对象__dict__获取对象的特征信息以字典形式存储
json_data =json.dumps(P,cls=PersonEncoder)
print(json_data)#{"name": "\u6a59\u5b502"}

#解析JSONDecoder
class PersonDecoder(json.JSONDecoder):
  def __init__(self):
    #指定解码规则
    #object_hook对象挂钩-对象解析-接受的是一个函数
    super().__init__(object_hook=self.to_python_obj)

  def to_python_obj(self,d):
    #d接受的是字典,当前制定的转化为json对象的数据格式
    return Person(d['name'])

#解析操作
python_data =json.loads(json_data,cls=PersonDecoder)
print(python_data)#Person(name=橙子2)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中精确输出JSON浮点数的方法
Apr 18 Python
Python中使用select模块实现非阻塞的IO
Feb 03 Python
Python使用Phantomjs截屏网页的方法
May 17 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
Python Web编程之WSGI协议简介
Jul 18 Python
10款最好的Python开发编辑器
Jul 03 Python
基于Python实现扑克牌面试题
Dec 11 Python
如何在django中添加日志功能
Feb 06 Python
Python itertools.product方法代码实例
Mar 27 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
Python如何利用正则表达式爬取网页信息及图片
Apr 17 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
Sep 04 #Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 #Python
学习Python需要哪些工具
Sep 04 #Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 #Python
Python程序慢的重要原因
Sep 04 #Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 #Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 #Python
You might like
用PHP制作静态网站的模板框架(二)
2006/10/09 PHP
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
php限制ip地址范围的方法
2015/03/31 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
Python 递归函数详解及实例
2016/12/27 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
django中间键重定向实例方法
2019/11/10 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
Pycharm调试程序技巧小结
2020/08/08 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
贷款工资证明范本
2015/06/12 职场文书
信用卡工资证明范本
2015/06/19 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL
Springboot中如何自动转JSON输出
2022/06/16 Java/Android