当前位置: 首页 > news >正文

Python JSON 序列化以及反序列化 文件读写

Python JSON 序列化以及反序列化

  • JSON (JavaScript Object Notation) 是一种轻量级的文本数据存储格式。
  • JSON 数据通常存储在字符串中,即JSON字符串,其实就是一字符串,只是带有一定的格式,可以被解析。
  • 本文使用的 Python 版本为3.12

反序列化

  • JSON字符串解析为Python对象叫做JSON的反序列化,也叫做JSON的解码

  • 反序列化一般使用json模块的loadsload方法。

  • loads当中的s并不是复数的意思,而是指处理的对象类型为str bytes 和 bytearray

  • load方法处理的对象类型为file like obj

  • 以上两个方法根据输入数据的不同,返回不同的Python对象。具体的转换关系见下表:

    JSON 字符串Python 对象
    objectdict
    arraylist
    stringstr
    number(integer)int
    number(real)float
    falseFalse
    trueTrue
    nullNone

字符串的反序列化

  • str bytes 和 bytearray的反序列化,使用方法loads

    # -*- coding:utf-8 -*-
    import jsonjson_obj_str = '{"number": 88888888, "名字": "小明"}'
    # encode 方法:将 字符串 转为 bytes
    # decode 方法,将 bytes 转为 字符串
    json_obj_bytes = json_obj_str.encode(encoding='UTF-8')
    json_array_str = '[1, 2, 3, "hello"]'
    json_str = '"hello"'
    json_int_num_str = '6666'
    json_float_num_str = '888.888'
    json_true_str = 'true'
    json_false_str = 'false'
    json_none_str = 'null'def json_str_decode(arg):python_obj = json.loads(arg)print(f'value: {python_obj}, type: {type(python_obj)}')for tmp in [json_obj_str, json_obj_bytes, json_array_str, json_str, json_int_num_str, json_float_num_str,json_true_str, json_false_str, json_none_str]:json_str_decode(tmp)'''
    输出为:
    value: {'number': 88888888, '名字': '小明'}, type: <class 'dict'>
    value: {'number': 88888888, '名字': '小明'}, type: <class 'dict'>
    value: [1, 2, 3, 'hello'], type: <class 'list'>
    value: hello, type: <class 'str'>
    value: 6666, type: <class 'int'>
    value: 888.888, type: <class 'float'>
    value: True, type: <class 'bool'>
    value: False, type: <class 'bool'>
    value: None, type: <class 'NoneType'>
    '''
    

json 文件的反序列化

  • 文件的反序列化,使用方法load

    # -*- coding:utf-8 -*-
    import json'''
    test.json 文件内容如下:
    {"名字": "小明","number": 888888,"女朋友": null
    }
    '''# 当 json 文件中含有中文时,得指定编码为 UTF-8
    with open('test.json', 'r', encoding='UTF-8') as f:python_obj = json.load(f)print(f'value: {python_obj}, type: {type(python_obj)}')'''
    输出为:
    value: {'名字': '小明', 'number': 888888, '女朋友': None}, type: <class 'dict'>
    '''
    

序列化

  • Python对象转为JSON字符串叫做JSON的序列化,也叫做JSON的编码
  • 序列化一般使用json模块的dumpsdump方法。
  • dumps当中的s并不是复数的意思,而是指字符串,即将Python对象编码为字符串
  • dump方法将Python对象编码为字符串并写入file like obj中。

Python 对象的序列化

  • Python对象的序列化,使用方法dumps

    # -*- coding:utf-8 -*-
    import jsonpy_obj_dict = {"number": 88888888, "名字": "小明"}
    py_obj_array = [1, 2, 3, "hello"]
    py_obj_str = 'hello'
    py_obj_int = 6666
    py_obj_float = 888.888
    py_obj_true = True
    py_obj_false = False
    py_obj_none = Nonedef json_str_encode(arg):# 当包含中文时,需指定 ensure_ascii=Falsejson_str = json.dumps(arg, ensure_ascii=False)print(f'value: {json_str}, type: {type(json_str)}')for tmp in [py_obj_dict, py_obj_array, py_obj_str, py_obj_int, py_obj_float,py_obj_true, py_obj_false, py_obj_none]:json_str_encode(tmp)'''
    输出为:
    value: {"number": 88888888, "名字": "小明"}, type: <class 'str'>
    value: [1, 2, 3, "hello"], type: <class 'str'>
    value: "hello", type: <class 'str'>
    value: 6666, type: <class 'str'>
    value: 888.888, type: <class 'str'>
    value: true, type: <class 'str'>
    value: false, type: <class 'str'>
    value: null, type: <class 'str'>
    '''
    

json 文件的序列化

  • 文件的序列化,使用方法dump

    # -*- coding:utf-8 -*-
    import jsonpy_obj_dict = {'名字': '小明', 'number': 888888, '女朋友': None}# 当包含中文时,须同时指定  encoding='UTF-8' 以及 ensure_ascii=False
    with open('test.json', 'w', encoding='UTF-8') as f:# indent=2 会使得输出更加优美json.dump(py_obj_dict, f, ensure_ascii=False, indent=2)
    

相关文章:

Python JSON 序列化以及反序列化 文件读写

Python JSON 序列化以及反序列化 JSON (JavaScript Object Notation) 是一种轻量级的文本数据存储格式。JSON 数据通常存储在字符串中&#xff0c;即JSON字符串&#xff0c;其实就是一字符串&#xff0c;只是带有一定的格式&#xff0c;可以被解析。本文使用的 Python 版本为3…...

Spring MVC 返回JSON数据

1. 前置准备 1.1 导入jackson依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version> </dependency>1.2 添加json数据转化器 EnableWebMvc …...

前端基础——HTML傻瓜式入门(1)

该文章Github地址&#xff1a;https://github.com/AntonyCheng/html-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…...

【AI】如何创建自己的自定义ChatGPT

如何创建自己的自定义ChatGPT 目录 如何创建自己的自定义ChatGPT大型语言模型(LLM)GPT模型ChatGPTOpenAI APILlamaIndexLangChain参考推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课本文将记录如何使用OpenAI GPT-3.5模型、LlamaIndex和LangChain创建自己的…...

电子科技大学链时代工作室招新题C语言部分---题号E

1. 题目 这道题大概的意思是说&#xff0c;一座城市中被埋了许多雷&#xff08;用一个只含0和1的字符串表示城市&#xff0c;1代表有雷&#xff0c;0代表无雷&#xff09;。 你作为一个排雷兵&#xff0c;需要花最少的钱引爆所有的雷来使城市中不再有雷&#xff08;太逆天了&a…...

K8S CNI

OCI概念 OCI&#xff0c;Open Container Initiative&#xff0c;开放容器标准&#xff0c;是一个轻量级&#xff0c;开放的治理结构&#xff08;项目&#xff09;&#xff0c;在 Linux 基金会的支持下成立&#xff0c;致力于围绕容器格式和运行时创建开放的行业标准。 OCI 项目…...

Python数据分析实验一:Python数据采集与存储

目录 一、实验目的与要求二、实验过程三、主要程序清单和运行结果1、爬取 “中国南海网” 站点上的相关信息2、爬取天气网站上的北京的历史天气信息 四、程序运行结果五、实验体会 一、实验目的与要求 1、目的&#xff1a; 理解抓取网页数据的一般处理过程&#xff1b;熟悉应用…...

丘一丘正则表达式

正则表达式(regular expression,regex,RE) 正则表达式是一种用来简洁表达一组字符串的表达式正则表达式是一种通用的字符串表达框架正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具正则表达式可以用来判断某字符串的特征归属 正则表达式常用操作符 操作符说明实…...

工业物联网平台在水务环保、暖通制冷、电力能源等行业的应用

随着科技的不断发展&#xff0c;工业物联网平台作为连接物理世界与数字世界的桥梁&#xff0c;正逐渐成为推动各行业智能化转型的关键力量。在水务环保、暖通制冷、电力能源等行业&#xff0c;工业物联网平台的应用尤为广泛&#xff0c;对于提升运营效率、降低能耗、优化管理等…...

【研发日记】Matlab/Simulink技能解锁(二)——在Matlab Function编辑窗口Debug

文章目录 前言 行断点 条件断点 按行步进 Watch Value 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 行断点 当Matlab Function出现异常时&#xff0c;如果能确定大致的代码段&#xff0c;就可以在相应的行上设置一…...

从键盘输入两个数,求它们的和并输出 从键盘输入三个数到a,b,c中,按公式值输出

别急别急&#xff0c;先看完 (从初学者出发&#xff09; 从键盘输入两个数&#xff0c;求它们的和并输出 作者 陈春晖 单位 浙江大学 本题目要求读入2个整数A和B&#xff0c;然后输出它们的和。 输入格式: 在一行中给出一个被加数 在另一行中给出一个加数 输出格式: 在…...

密码解密 C卷(100%用例)(JavaPythonC++Node.jsC语言)

给定一段“密文“字符串s,其中字符都是经过"密码本”映射的,现需要将"密文"解密并且输出 映射的规则(a-i)分别用(1-9)表示;(j-z")分别用(10-"26”)表示 约束:映射始终唯一 输入描述: “密文”字符串 输出描述: 明文字符串 补充说明: 翻译后的文本…...

因为manifest.json文件引起的 android-chrome-192x192.png 404 (Not Found)

H5项目打包之后&#xff0c;总是有这个报错&#xff0c;有时候还有别的icon也找不见 一通调查之后&#xff0c;发现是因为引入了一个vue插件 这个插件引入之后&#xff0c;webpack打包的时候就会自动在dist文件夹中产生一个manifest.json文件这个文件里面主要就是一些icon地址的…...

『 Linux 』进程替换( Process replacement ) 及 简单Shell的实现(万字)

文章目录 &#x1f984; 进程替换&#x1f9a9; execl()函数&#x1f9a9; execlp()函数&#x1f9a9; execle()函数&#x1f9a9; execv()函数&#x1f9a9; execvp()函数&#x1f9a9; execvpe()函数&#x1f9a9; execve()函数 &#x1f984; 简单Shell命令行解释器的实现&a…...

【Linux】从零开始认识进程 — 前篇

我从来不相信什么懒洋洋的自由。我向往的自由是通过勤奋和努力实现的更广阔的人生。。——山本耀司 从零开始认识进程 1 认识冯诺依曼体系2 操作系统3 进程3.1 什么是进程&#xff1f;&#xff1f;&#xff1f;3.2 进程管理PCB 3.3 Linux中的进程深入理解 3.4 进程创建总结 送给…...

公众号留言功能恢复了,你的开通了吗?

了解公众号的人都知道&#xff0c;腾讯在2018年3月宣布暂停新注册公众号的留言功能&#xff0c;这之后注册的公众号都不具备留言功能。 这成了很多号主运营人的一块心病&#xff0c;也包括我。 没有留言&#xff0c;就好似一个人玩单机游戏&#xff0c;无法与读者互动&#xff…...

C语言葵花宝典之——文件操作

前言&#xff1a; 在之前的学习中&#xff0c;我们所写的C语言程序总是在运行结束之后&#xff0c;就会自动销毁&#xff0c;那如果我们想将一个结果进行长期存储应该如何操作呢&#xff1f;这时候就需要我们用文件来操作。 目录 1、什么是文件&#xff1f; 1.1 程序文件 1.2…...

SSM框架,MyBatis-Plus的学习(下)

条件构造器 使用MyBatis-Plus的条件构造器&#xff0c;可以构建灵活高效的查询条件&#xff0c;可以通过链式调用来组合多个条件。 条件构造器的继承结构 Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xf…...

边缘计算网关的工作原理及其在工业领域的应用价值-天拓四方

随着物联网技术的快速发展&#xff0c;物联网时代已经悄然来临。在这个时代&#xff0c;数以亿计的设备相互连接&#xff0c;共享数据&#xff0c;共同构建智慧的世界。边缘计算网关通过将计算能力和数据存储推向网络的边缘&#xff0c;实现了对海量数据的实时处理&#xff0c;…...

下载指定版本的pytorch

下载网址&#xff1a;https://download.pytorch.org/whl/torch_stable.html 参考博客网址&#xff1a;https://blog.csdn.net/wusuoweiieq/article/details/132773977...

从零实现Clock页面置换算法:原理、代码与性能调优实战

1. 为什么需要页面置换算法&#xff1f; 想象你正在玩一个大型开放世界游戏&#xff0c;电脑内存就像你的背包空间。当背包装满时&#xff0c;每次捡新道具都需要先扔掉旧道具——这就是操作系统面临的内存管理问题。Clock算法就是那个帮你智能决定"扔哪件道具"的管家…...

OpenClaw自动化测试:Kimi-VL-A3B-Thinking多模态交互验证框架

OpenClaw自动化测试&#xff1a;Kimi-VL-A3B-Thinking多模态交互验证框架 1. 为什么需要AI驱动的自动化测试 去年接手一个客户端项目时&#xff0c;我遇到了一个典型痛点——每次发版前的手动回归测试需要3个人天。更麻烦的是&#xff0c;UI微调导致的视觉差异很难通过传统断…...

可控硅在交流负载控制中的应用与实践

1. 项目概述作为一名电子工程师&#xff0c;我经常遇到需要控制交流负载的场景。传统的继电器方案虽然简单可靠&#xff0c;但在某些特殊应用场合却存在明显短板。比如需要频繁开关的场合&#xff0c;继电器的机械触点很快就会因为电弧腐蚀而失效&#xff1b;又比如需要高速切换…...

AGV如何实现自主避障

下面按“传感器→建模→算法→安全机制→工程实现”的顺序&#xff0c;把AGV自主避障讲清楚。 一、整体架构概览 AGV要“自己绕开障碍”&#xff0c;至少要做三件事&#xff1a; 1&#xff09;感知&#xff1a;知道“我在哪”“周围有什么”&#xff1b; 2&#xff09;规划&…...

我的STM32F407项目踩坑记:FreeRTOS下实现U盘OTA升级,这些细节你一定要注意

STM32F407实战&#xff1a;FreeRTOS环境下U盘OTA升级的九大陷阱与解决方案 去年接手一个工业控制器项目时&#xff0c;客户突然要求增加U盘固件升级功能。本以为凭借之前的IAP开发经验能轻松搞定&#xff0c;结果在FreeRTOS环境下踩坑无数——从任务调度混乱到USB驱动冲突&…...

libcimbar视觉传输工具实战指南:跨设备无网络数据传输解决方案

libcimbar视觉传输工具实战指南&#xff1a;跨设备无网络数据传输解决方案 【免费下载链接】libcimbar Optimized implementation for color-icon-matrix barcodes 项目地址: https://gitcode.com/GitHub_Trending/li/libcimbar 一、核心价值解析&#xff1a;突破网络限…...

保姆级教程:在GD32F103上用Keil MDK5和FreeRTOS 202411.00创建你的第一个多任务LED闪烁项目

保姆级教程&#xff1a;在GD32F103上用Keil MDK5和FreeRTOS 202411.00创建你的第一个多任务LED闪烁项目 嵌入式开发的世界里&#xff0c;实时操作系统&#xff08;RTOS&#xff09;正变得越来越重要。对于刚接触GD32系列芯片或FreeRTOS的开发者来说&#xff0c;如何快速搭建一个…...

AllTube Download 10个实用技巧:从基础下载到高级格式转换

AllTube Download 10个实用技巧&#xff1a;从基础下载到高级格式转换 【免费下载链接】alltube Web GUI for youtube-dl 项目地址: https://gitcode.com/gh_mirrors/al/alltube AllTube Download 是一款基于 youtube-dl 的 Web GUI 工具&#xff0c;让用户能够轻松从 Y…...

JavaScript注释的艺术:gh_mirrors/js/js教你写出自解释代码

JavaScript注释的艺术&#xff1a;gh_mirrors/js/js教你写出自解释代码 【免费下载链接】js :art: A JavaScript Quality Guide 项目地址: https://gitcode.com/gh_mirrors/js/js 在JavaScript开发中&#xff0c;注释是代码质量的重要组成部分&#xff0c;但很多开发者误…...

告别写死地址!CH32V IAP升级实战:用函数传参实现APP跳转地址的动态配置

CH32V IAP升级进阶&#xff1a;动态跳转地址的工程实践与安全设计 在嵌入式开发中&#xff0c;IAP&#xff08;In-Application Programming&#xff09;技术是实现固件远程更新的重要手段。对于CH32V系列RISC-V MCU而言&#xff0c;官方示例中"写死"跳转地址的做法虽…...