【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, os

BASE_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, os

BASE_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.99
    quantity: 2
- product:
    name: 智能手机
    price: 599.99
    quantity: 1
children:
- age: 5
  name: 小王
- age: 3
  name: 小李
email: zhangsan@example.com
isMarried: false
login:
  password: password123
  username: zhangsan
name: 张三
phoneNumbers:
- number: '2341234'
  type: home
- number: '5678901'
  type: office

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

装饰器模式 详解 设计模式

装饰器模式 它允许你在不改变对象结构的情况下,动态地将新功能附加到对象上。 结构: 抽象组件(Component):定义了原始对象和装饰器对象的公共接口或抽象类,可以是具体组件类的父类或接口。具体组件&…

算法--动态规划(线性DP、区间DP)

这里写目录标题 tip数组下标从0开始还是从1开始 线性DP数学三角形介绍算法思想例题代码 最长上升子序列介绍算法思想例题代码 最长公共子序列介绍算法思想例题代码 编辑距离介绍例题代码 区间DP问题石子合并介绍算法思想例题代码 tip 数组下标从0开始还是从1开始 如果代码中涉…

Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版

Topaz Video AI是一款革命性的视频智能处理软件,它利用先进的机器学习和人工智能技术,为视频创作者提供了前所未有的视频增强和修复功能。无论您是专业视频编辑师、摄影师,还是热爱视频创作的爱好者,Topaz Video AI都能帮助您轻松…

返回JSON对象

在目前的Java项目中,我们最经常使用的便是JSON,不是传递JSON对象,就是返回JSON对象,甚至还把多个参数封装成JSON对象来进行传递,以便简化代码等! 但是,该如何操作代码才能正确的返回一个或者多…

excel导出标准化

虽然标题叫标准化,只不过是我自己的习惯,当一件事情变得流程标准化之后,开发程序就会飞快,开发评估工作总是 搞个1~2天,实则前端后端一起开发,1个小时就可以搞定。 1 前端 const exportXls async () >…

每日一题——LeetCode1556.千位分隔符

方法一 个人方法: 把n转为字符串,逆序遍历n,把n的每个元素加入res,每三次加入.,最后将res翻转再转为字符串即为符合题目要求的结果 var thousandSeparator function(n) {nlet res[],lenn.length-1for(let ilen;i>…

tomcat 搭建博客 及破解数据库密码

一 tomcat 搭建博客 (一)博客安装包 1, 把博客war包 放到 webapps 文件夹下 2,会自动解压 3,做个软连接 方便后续操作 可以注意到 因为war包 是又tomcat 自己解压的 所以属主数组还是 tomcat &#xff08…

大模型生成,Open API调用

大模型是怎么生成结果的 通俗原理 其实,它只是根据上文,猜下一个词(的概率)…… OpenAI 的接口名就叫【completion】,也证明了其只会【生成】的本质。 下面用程序演示【生成下一个字】。你可以自己修改 prompt 试试…

LaMa Image Inpainting 图像修复 Onnx Demo

目录 介绍 效果 模型信息 项目 代码 下载 LaMa Image Inpainting 图像修复 Onnx Demo 介绍 gihub地址:https://github.com/advimman/lama 🦙 LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WAC…

电脑休眠之后唤不醒

现象:午休时间电脑休眠了,醒来之后发现在密码输入界面,但鼠标键盘没反应。按重启键或电源机重新开机,结果开不了机。 原因:1、内存条脏了,导致内存条读取失败 2、休眠的时候硬盘休眠了,导致按…

7、Redis-事务、持久化、内存淘汰机制和过期key处理

目录 一、事务 二、持久化 三、内存淘汰机制 四、过期key处理 一、事务 Redis的事务本质上就是一个批量执行命令的操作。分为三个步骤: 开始事务:multi命令入队:正常输入命令即可执行事务(依次执行命令)&#xf…

linux_day04

大纲:命令,vim,gcc,编译工具,生成代码,调试,库makefile,系统编程 文件系统:文件属性,文件内容,万物皆文件(不在内存中的是文件&#…

为什么说?上位机开发有广泛的前景

上位机开发展现了广泛的前景,主要有以下几个方面的原因: 广泛应用的C#语言: C#在软件开发领域得到了广泛应用,拥有丰富的库、工具和社区支持,使得学习和使用C#进行上位机开发更加便捷。与Windows密切相关: …

LeetCode -- 79.单词搜索

1. 问题描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水…

用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告

本篇文章将介绍如何使用开源的测试报告生成框架 Allure 生成规范、格式统一、美观的测试报告。 通过这篇文章的介绍,你将能够: 将 Allure 与 Pytest 测试框架相结合;如何定制化测试报告内容执行测试之后,生成 Allure 格式的测试报…

10.广域网技术

1. PPP实验点这里(拓扑代码) 2. PPPoE配置实验点这里(拓扑代码) 目录 一、广域网二、PPP协议三、PPP链路建立过程1-LCP(链路协商)四、PPP链路建立过程2-PAP/CHAP(认证协商,可选&…

微服务间通信重构与服务治理笔记

父工程 依赖版本管理,但实际不引入依赖 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

详解字符串函数<string.h>(上)

1. strlen函数的使用和模拟实现 size_t strlen(const char* str); 1.1 函数功能以及用法 字符串长度 strlen函数的功能是计算字符串的长度。在使用时&#xff0c;要求用户传入需要计算长度的字符串的起始位置&#xff0c;并返回字符串的长度。 #include <stdio.h> #…

【两万字面试系列】三年前的面试题。Service里面的线程安全问题

前言 三年前&#xff0c;大概是21年&#xff0c;那会刚学完java&#xff0c;然后去面试&#xff0c;被打的一塌糊涂&#xff0c;今天来盘一盘之前的面试&#xff0c;到底是怎样的问题整住了。然后发现了去年整的线程安全东西&#xff0c;也贴到文章后面了。那个贴的还不太准&a…

2024腾讯云服务器优惠价格表又降价了,给同行干emo了

腾讯云优惠活动2024新春采购节活动上线&#xff0c;云服务器价格已经出来了&#xff0c;云服务器61元一年起&#xff0c;配置和价格基本上和上个月没什么变化&#xff0c;但是新增了8888元代金券和会员续费优惠&#xff0c;腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…