Python Json使用

Python Json使用

本篇主要介绍一下 python 中 json的使用 如何把 dict转成json 、object 转成json 、以及json转成对象 等等。。

json是非常常用的一种数据格式,比如在前后端分离的 web开发中,返回给前端 通常都会使用json ,那么来看看 python 中如何玩转json

1.dict 转成 json (json.dumps(dict))

注意: ensure_ascii=False 否则中文乱码

import json

 student = {
     'name': 'johnny',
     'age': 27,
     'address': '无锡'
 }

 print(json.dumps(student, ensure_ascii=False))
{"name": "johnny", "age": 27, "address": "无锡"}  json

2.json 转 dict (json.loads(jsonstr))

import json

json_student = '{"name": "johnny", "age": 27, "address": "无锡"}'

print(json.loads(json_student))
{'name': 'johnny', 'age': 27, 'address': '无锡'} 字典dict

3. 类对象转 json (dict属性/提供default=方法)

3.1 错误使用

注意:json.dumps() 不支持 直接把 类对象放进去!!! 会报错 Student is not JSON serializable

import json

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

student = Student('candy', '30')
#错误使用!!!
print(json.dumps(student))  报错!!! TypeError: Object of type Student is not JSON serializable

3.2 使用类对象 dict 属性

#正确使用!!!
print(json.dumps(student.__dict__))) #可以使用 类对象的 __dict__ 属性
#{"name": "candy", "age": "30"}

3.3 提供一个 convert2json 方法

default=指定方法

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @staticmethod
    def conver2json(self):
        return {
            'name': self.name,
            'age': self.age
        }
#通过自己写一个 conver2json方法 去手动转化一下 把 类对象转成json
print(json.dumps(student,default=Student.conver2json))

4.json 转 类对象 (json.loads(jsonstr,object_hook=..))

注意:json.loads 默认只会转成dict, 需要自己提供方法 把dict 转成 类对象

import json

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @staticmethod
    def conver2json(self):
        return {
            'name': self.name,
            'age': self.age
        }

    @staticmethod
    def convert2object(dict):
        return Student(dict['name'],dict['age'])

json_student = '{"name": "johnny", "age": 27, "address": "无锡"}'
print(json.loads(json_student,object_hook=Student.convert2object))
#

5. dict/对象 转为 json文件 (json.dump(student,f))

注意 dump 还是 只能接收 dict ,如果要把 对象写到json中 需要先把对象 转成 dict ,可以通过 ——dict——属性

student = {
    'name': 'johnny',
    'age': 27,
    'address': '无锡'
}
with open('student.json','w') as f:
    json.dump(student,f,ensure_ascii=False)

6. json文件转 dict /对象 (json.load)

with open('student.json','r')  as f:
    print(json.load(f))

小疑问

为什么:转成json 后 name 是一个数组呢? 因为 self.name = name, 后面有一个 逗号,。。。 会把这个name当成元组 ,元组转成 json 就是 数组!!!

class Student:
    def __init__(self, name, age):
        self.name = name,  #这里!!!不能有 逗号。。
        self.age = age

student = Student('candy', '30')
print(json.dumps(student.__dict__))
#猜猜它的打印是什么

#{"name": ["candy"], "age": "30"}

总结

  1. json.dumps() 只支持 dict转json 如果是 class 对象 需要 通过 dict属性或者提供default= conver2json 方法
  2. json.dump() 是写入 文件中
  3. json.loads() 只支持把 json str转成 dict ,如果要转成 class 对象 则需要提供 object_hook=convert2object方法
  4. json.load()/ 是从文件中读取 jsonstr 到 dict

很简单 注意一下 class 和 json 的相互转化即可

参考:http://www.kaotop.com/it/26500.html

欢迎大家访问 个人博客 Johnny小屋
欢迎关注个人公众号

Python Json使用

Original: https://www.cnblogs.com/askajohnny/p/16511698.html
Author: AskaJohnny
Title: Python Json使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684730/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 图像通道、RGB与色彩体系

    通道(Channels) 图像的通道指的是什么?是不是灰度图的通道数为1,彩色图的通道为3 ? 图像通&#…

    技术杂谈 2023年6月21日
    0110
  • oclint 是编译器缺省语法检查功能的增强

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月30日
    096
  • crash命令 —— whatis

    参考:https://crash-utility.github.io/help_pages/whatis.html 用法: 查看内核内核符号或者数据类型的详细定义 whatis &…

    技术杂谈 2023年5月30日
    089
  • bash脚本中使用密码登录机器

    一、问题 ssh命令没有密码参数,需要交互式输入; 但出于管理等需求我们可能会需要在shell脚本中登录其他机器,交互式输入密码就没法满足这种需求了。 二、实现 2.1 安装ssh…

    技术杂谈 2023年5月31日
    089
  • 【JavaWeb-jQuery】网站 – 应用 Ajax,jQuery 实现级联查询

    网站功能: 网页打开的时候,自动加载省份信息,用户通过选择不同的省份列表值,对应的城市信息也随之变化。 网站结构: 网站预览: 建表语句: CREATE TABLE pro ( i…

    技术杂谈 2023年7月10日
    072
  • Oracle 恢复delete误删数据

    — 开启行移动功能 alter table 表名 enable row movement; — 查询删除前的数据 select * from 表名 as of timestam…

    技术杂谈 2023年7月11日
    092
  • 【新特性速递】卡片式表格,Yeah~~~

    FineUI 的下个版本(v8.0.0),我们会为表格增加卡片样式,相信这是一个很多网友期待已久的功能。 网友的反馈 很久很久之前,就有网友在最初的 BBS 论坛提到这个事情,由于…

    技术杂谈 2023年6月1日
    0111
  • 浅析渗透测试之手动和自动的优缺点

    手动渗透测试和自动渗透测试本是出于相同的目的,即帮助企业主动发现漏洞,了解现有安全措施的成效或不足。它们之间的唯一区别就是执行方式不同,手动渗透测试是由人工来完成,自动渗透测试是由…

    技术杂谈 2023年5月31日
    091
  • Win10文件、文件夹被占用解决方法

    有时删除文件/弹出移动硬盘的时候会出现文件或文件夹或磁盘被占用的情况,从而无法删除文件/文件夹或安全弹出移动硬盘。这时可以在资源管理器中搜索该文件、文件夹,来找到对应的程序。使用了…

    技术杂谈 2023年7月25日
    078
  • 2、Swift协程详解:用async函数替换回调

    我们前面已经简单介绍了 Swift 的协程,可以确认的一点是,如果你只是看了上一篇文章,那么你肯定还是不会用这一个特性。你一定还有一些疑问: 异步函数是谁提供的? 我可以自己定义吗…

    技术杂谈 2023年6月1日
    062
  • 关于提问

    A 和 B 对话如下: A: xx 产品,一个月一个版本,只包含一个小功能,培训销售的工作跟不上怎么办?培训工作跟不上,研发做的功能前端都不知道,那做了有什么用?为什么不规划成大版…

    技术杂谈 2023年7月11日
    081
  • Python 字典相关知识

    按照键名查询:如果没有查询的键名,程序将会 报错。 dict1 = {‘one’: 1, ‘two’: 2, ‘three’: 3, ‘name’: ‘吕小树’, ‘sex’: ‘…

    技术杂谈 2023年6月21日
    088
  • 五岔路口交通问题

    前言 五岔路口交通问题是已经给定了道路的通行情况,我们可以直接分析得到所有合法的道路通行方式,然后根据这些再得到不同方式之间的通行关系 建图过程 建点 如图 E为入口,是 单行道;…

    技术杂谈 2023年7月11日
    094
  • JS——事件流与事件处理程序

    1.事件流:从页面中接收事件的顺序 1.1 IE :事件冒泡流1.2 Netscape :事件捕获1.3 DOM事件流 :事件捕获阶段——事件目标阶段——事件冒泡阶段DOM2级事件…

    技术杂谈 2023年5月31日
    082
  • Elasticsearch性能优化汇总——写入&搜索

    在Elasticsearch的默认设置下,是综合考虑数据可靠性、搜索实时性、写入速度等因素的。当离开默认设置、追求极致的写入速度时,很多是以牺牲可靠性和搜索实时性为代价的。有时候,…

    技术杂谈 2023年7月24日
    055
  • Pillow 图片处理模块

    pic = Image.open(’11.jpg’) im = Image.new(‘RGB’, (128, 128), (255, 0, 0)) im1 = Image.new(…

    技术杂谈 2023年6月21日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球