【python】json转成成yaml中文编码异常显示成:\u5317\u4EAC\u8DEF123\u53F7

姊妹篇:【python】json转成成yaml
json数据

{"name": "张三","age": 30,"isMarried": false,"children": [{"name": "小王","age": 5},{"name": "小李","age": 3}],"address": {"street": "北京路123号","city": "北京市","postalCode": "100000"},"email": "zhangsan@example.com","phoneNumbers": [{"type": "home","number": "2341234"},{"type": "office","number": "5678901"}],"login": {"username": "zhangsan","password": "password123"},"cart": [{"product": {"name": "笔记本电脑","price": 1199.99,"quantity": 2}},{"product": {"name": "智能手机","price": 599.99,"quantity": 1}}]
}

code v1

# -- coding:utf-8 --
import json, yaml, osBASE_DIR = os.path.dirname(os.path.abspath(__file__))def jsonToYaml(jsonPath, yamlPath):with open(jsonPath, "r", encoding='utf-8') as f:f_json = json.load(f)with open(yamlPath, "w", encoding='utf-8') as f:f_yaml = yaml.dump(f_json)yaml.dump(yaml.safe_load(f_yaml), f, sort_keys=False)if __name__ == '__main__':jsonPath = "data.json"yamlPath = "data.yaml"jsonPath = os.path.join(BASE_DIR, jsonPath)yamlPath = os.path.join(BASE_DIR, yamlPath)jsonToYaml(jsonPath, yamlPath)

转化后:
在这里插入图片描述
转化后发现中文显示不是那么友善,全变成了:\u5317\u4EAC\u8DEF123\u53F7,这种形式;
主要原因:
在PyYAML中,默认的编码是UTF-8,但是如果你的字符串包含非UTF-8字符,比如中文,你可能需要指定一个不同的编码。在你的代码中,你可能需要指定在写入YAML文件时使用的编码是UTF-8,而不是默认的编码。

另外,当你使用 yaml.dump() 时,如果你想要保持中文等非ASCII字符的可读性,你应该使用 default_flow_style=False 参数,这样YAML文件将以块样式编写,而不是流动样式。

修改后的代码:

# -- coding:utf-8 --
import json, yaml, osBASE_DIR = os.path.dirname(os.path.abspath(__file__))def jsonToYaml(jsonPath, yamlPath):with open(jsonPath, "r", encoding='utf-8') as f:f_json = json.load(f)with open(yamlPath, "w", encoding='utf-8') as f:f_yaml = yaml.dump(f_json)# yaml.dump(yaml.safe_load(f_yaml), f, sort_keys=False)# 使用safe_dump以避免潜在的安全风险,除非你完全信任源数据yaml.safe_dump(f_json, f, default_flow_style=False, allow_unicode=True)if __name__ == '__main__':jsonPath = "data.json"yamlPath = "data.yaml"jsonPath = os.path.join(BASE_DIR, jsonPath)yamlPath = os.path.join(BASE_DIR, yamlPath)jsonToYaml(jsonPath, yamlPath)

转换后的结果:

address:city: 北京市postalCode: '100000'street: 北京路123号
age: 30
cart:
- product:name: 笔记本电脑price: 1199.99quantity: 2
- product:name: 智能手机price: 599.99quantity: 1
children:
- age: 5name: 小王
- age: 3name: 小李
email: zhangsan@example.com
isMarried: false
login:password: password123username: zhangsan
name: 张三
phoneNumbers:
- number: '2341234'type: home
- number: '5678901'type: office

在本文中,我们探讨了技术性文章博客的重要性,它不仅能提升个人品牌,还能促进知识共享和技能成长。通过选择合适的平台、保持专业性和真诚性,并利用SEO和社交媒体策略来提高可见性,任何人都可以成功地撰写和推广技术性文章博客。记住,持续学习和实践是提升技术能力的的关键,而写作是这一旅程中的宝贵工具。让我们开始撰写影响未来的技术故事吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/502273.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024/2/17打卡DFS---经典n—皇后问题***

注意点: 斜线上不能存放多个皇后,可以用截距表示,因为所有的直线斜率都为-1或者 1 ,不会存在截距相同的直线。 截距为负数的直线,可以用nabs(截距)处理。 另一种处理截距的方式:(更…

flutter旋转动画,Android彻底组件化方案实践方法

Android基础 & 常用 针对Android基础&常用知识,我认为对于初级开发者来说,按照优先级最主要的知识点主要包括:四大组件、布局使用、多线程 & 动画;具体介绍如下: 2. Android进阶 针对Android进阶知识&am…

redis实现分布式全局唯一id

目录 一、前言二、如何通过Redis设计一个分布式全局唯一ID生成工具2.1 使用 Redis 计数器实现2.2 使用 Redis Hash结构实现 三、通过代码实现分布式全局唯一ID工具3.1 导入依赖配置3.2 配置yml文件3.3 序列化配置3.4 编写获取工具3.5 测试获取工具 四、运行结果 一、前言 在很…

Northwestern University-844计算机科学与技术/软件工程-复试注意事项【考研复习】

本文提到的西北大学是位于密歇根湖泊畔的西北大学。西北大学(英语:Northwestern University,简称:NU)是美国的一所著名私立研究型大学。它由九人于1851年创立,目标是建立一所为西北领地地区的人服务的大学。…

Opencv基础与学习路线

Opencv Opencv每一篇目具体: Opencv(1)读取与图像操作 Opencv(2)绘图与图像操作 Opencv(3)详解霍夫变换 Opencv(4)详解轮廓 Opencv(5)平滑处理 具体Opencv相关demo代码欢迎访问我的github仓库(包含python和c代码) demo代码 文章目录 Opencv一…

vivo 在离线混部探索与实践

作者:来自 vivo 互联网服务器团队 本文根据甘青、黄荣杰老师在“2023 vivo开发者大会"现场演讲内容整理而成。 伴随 vivo 互联网业务的高速发展,数据中心的规模不断扩大,成本问题日益突出。在离线混部技术可以在保证服务质量的同时&…

Golang 开发实战day01 - Variable String Numeric

Golang 教程01 - Variable String Numeric 1. Go语言的重要性 Go语言,又称Golang,是一种由Google开发的静态编译型编程语言。它于2009年首次发布,并在短短几年内迅速流行起来。Go语言具有以下特点: 语法简单易学:Go…

一线互联网架构师筑基必备技能之Android篇,快速从入门到精通

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读Android系统源码,还包括各种优秀的开源库。 由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。 深入解析微信 MMKV 源码 初始化获取修改删除读取…

云计算 2月21号 (linux文件及用户管理)

一、文件管理 1.1快捷键 编辑命令: Ctrl a :移到命令行首 Ctrl e :移到命令行尾 Ctrl u :从光标处删除至命令行首 Ctrl k :从光标处删除至命令行尾 Ctrl w :从光标处删除至字首 Ctrl d &#x…

Linux系统中安装redis+redis后台启动+常见相关配置

1、下载Redis Redis官网:https://redis.io/ 历史版本: http://download.redis.io/releases 2、连接Linux(或者VMwear) 我们安装的是linux版本的redis 打开xftp我们需要先将我们的Redis上传到服务器上 解压到这里 解压的指令 …

赵本山与高秀敏夫妇本想找范伟要那1200元电视机垫款,却不好意思向范伟开口--小品《面子》(中1)的台词

赵本山与高秀敏夫妇本想找范伟要那1200元电视机垫款,却不好意思向范伟开口 --小品《面子》(中1)的台词 表演者:赵本山 高秀敏 范伟 (接上) 高秀敏:咱俩抓紧提事啊 赵本山:不着急…

librtmp源码分析

阅读了librtmp的源码,简单记录下。 首先补充下AMF格式基本知识 1 AMF格式 AMF是Action Message Format(动作消息格式)的简写,它是一种二进制的数据格式。它的设计是为了把actionscript里面的数据(包括Object, Array, Boolean, Number等)序列化成二进制…