如何将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读写Excel文件的实例
Nov 01 Python
python中使用OpenCV进行人脸检测的例子
Apr 18 Python
Python列表生成器的循环技巧分享
Mar 06 Python
浅谈Python 中整型对象的存储问题
May 16 Python
Python使用cx_Oracle模块操作Oracle数据库详解
May 07 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
利用matplotlib实现根据实时数据动态更新图形
Dec 13 Python
sklearn+python:线性回归案例
Feb 24 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
Python内建序列通用操作6种实现方法
Mar 26 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
一组PHP加密解密函数分享
2014/06/05 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
php格式化json函数示例代码
2016/05/12 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
只需20行代码就可以写出CSS覆盖率测试脚本
2013/04/24 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
深入理解js promise chain
2016/05/05 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
python线程池threadpool使用篇
2018/04/27 Python
python中pip的安装与使用教程
2018/08/10 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
python配置文件写入过程详解
2019/10/19 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
幼儿园教研活动总结
2014/04/30 职场文书
社区服务活动总结
2014/05/07 职场文书
2014年新教师工作总结
2014/11/08 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
感谢信
2019/04/11 职场文书
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js