如何将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操作MySQL数据库具体方法
Oct 28 Python
python实现实时监控文件的方法
Aug 26 Python
Python之列表的插入&amp;替换修改方法
Jun 28 Python
python flask实现分页的示例代码
Aug 02 Python
python实现朴素贝叶斯算法
Nov 19 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
在python中实现强制关闭线程的示例
Jan 22 Python
python实现电子产品商店
Feb 26 Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
keras中的backend.clip用法
May 22 Python
Python实现滑雪小游戏
Sep 25 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
Thinkphp无限级分类代码
2015/11/11 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
一分钟理解js闭包
2016/05/04 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
2019/04/29 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
python中eval与int的区别浅析
2019/08/11 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
前台领班岗位职责
2013/12/04 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
学校安全生产承诺书
2014/05/23 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
护士找工作求职信
2014/07/02 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS