关于json.dumps中的参数详解

news/2024/12/2 20:56:34/

中文编码问题

这样一段代码:

import json
dict = {'id': 1, 'title': b'\xe7\xac\xac\xe4\xb8\x80\xe7\xab\xa0 \xe7\xa7\xa6\xe7\xbe\xbd'}
dup = json.dumps(dict ,ensure_ascii=False)
print(dup)

Python2执行输出:

{"id": 1, "title": "第一章 秦羽"}

Python3执行报错:

TypeError: Object of type bytes is not JSON serializable

终稿:

安装模块:

pip3 install numpy

最终代码:

import json
import numpy as npclass MyEncoder(json.JSONEncoder):def default(self, obj):if isinstance(obj, np.ndarray):return obj.tolist()elif isinstance(obj, bytes):return str(obj, encoding='utf-8');return json.JSONEncoder.default(self, obj)dict  = {'id': 1, 'title': b'\xe7\xac\xac\xe4\xb8\x80\xe7\xab\xa0 \xe7\xa7\xa6\xe7\xbe\xbd'}
dup = json.dumps(dict , cls=MyEncoder, ensure_ascii=False, indent=4)
print(dup)

之前的单个转码:

sql = "SELECT id,title FROM novel LIMIT 10;"
result = mysql.getAll(sql)
for each in result:ach['title'] = each['title'].decode('utf-8')

参考:https://blog.csdn.net/bear_sun/article/details/79397155

Web输出

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。

Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:

  • json.dumps(): 对数据进行编码。
  • json.loads(): 对数据进行解码。

在这里插入图片描述

# 字典类型中有中文编码
dict= {'id': 1, 'title': b'\xe7\xac\xac\xe4\xb8\x80\xe7\xab\xa0 \xe7\xa7\xa6\xe7\xbe\xbd'}
# 转Json对象
dict= json.dumps(dict, cls=MyEncoder, ensure_ascii=False, indent=4)
# 转字典类型
dict= json.loads(dict)context = {}
context.update({'novel_list': result})
# 或者直接
context = {'novel_list': result}return render(request, 'novel_list.html',  context)

例子如下:

import json
import numpy as npclass MyEncoder(json.JSONEncoder):def default(self, obj):if isinstance(obj, np.ndarray):return obj.tolist()elif isinstance(obj, bytes):return str(obj, encoding='utf-8');return json.JSONEncoder.default(self, obj)dict = {'id': 1, 'title': b'\xe7\xac\xac\xe4\xb8\x80\xe7\xab\xa0 \xe7\xa7\xa6\xe7\xbe\xbd'}
dup = json.dumps(dict, cls=MyEncoder, ensure_ascii=False, indent=4)
print(dup)

indent

根据数据格式缩进显示,读起来更加清晰,indent的数值,代表缩进的位数。

ensure_ascii

如果无任何配置,或者说使用默认配置, 输出的会是中文的ASCII字符吗,而不是真正的中文。 这是因为json.dumps 序列化时对中文默认使用的ascii编码。

{"id": 1,"title": "\u7b2c\u4e00\u7ae0 \u79e6\u7fbd"
}

cls

dict类型的数据(存在中文),在python2中是可以转化的,但是在python3中存在序列化问题:

TypeError: Object of type bytes is not JSON serializable

http://www.ppmy.cn/news/7018.html

相关文章

【vue设计与实现】编译器 - 转换上下文与节点操作 进入与退出

context.nodeTransforn 数组,这里的 context 可以看作AST转换函数过程中的上下文数据。所有 AST转换函数都可以通过 context来共享数据。上下文对象中通常会推护程序的当前状态。上下文对象中包含的信息对于编写复杂的转换函数非常有用。接下来我们要做的就是构造转…

详解SpringBean的作用域(Scopes)

文章目录一、SpringBean作用域总览二、"singleton" Bean作用域三、"prototype" Bean作用域1、验证singleton、prototype类型的Bean2、总结四、"request" Bean作用域1、配置2、简介五、"session" Bean作用域1、配置2、简介3、总结sessi…

MyBatis 中的动态 sql

动态 sql 简单来讲就是我们能通过条件的设置生成不同的 sql,MyBatis 中常用的动态 sql 表达式主要是有五种: if choose (when, otherwise) trim, where, set foreach sql if 动态 sql 中最常见的场景是根据条件查询,比如要实现一个查询…

好书推荐《C++17 in Detail》

无意中发现作者的博客(https://www.cppstories.com/)和这本书。这本书算是对C17新增特性较为全面的介绍,而且从实战出发,不流于语法细枝末节,简洁清晰,可以作为Scott Meyers那本非著名的《Effective Modern…

青少年等级考试【Python通关干货】(二级)

青少年等级考试【Python通关干货】(二级)1.列表类型的概念 2.序列的通用操作 3.可变序列及列表的通用操作 4.列表的特有操作 5.元组类型的概念与操作

Hive+Spark离线数仓工业项目--数仓维度层DWS层构建(1)

维度建模回顾:建模流程 目标:掌握维度建模的建模流程 实施 step1-需求调研:业务调研和数据调研 - 了解整个业务实现的过程 - 收集所有数据使用人员对于数据的需求 - 整理所有数据来源 step2-划分主题域:面向业务将业务…

SFP、SFP+、SFP28、QSFP+和QSFP28之间的区别以及不同场景的使用选型

SFP、SFP+、SFP28、QSFP+和QSFP28之间的区别以及不同场景的使用选型。 SFP、SFP+、SFP28、QSFP+和QSFP28这些光模块类型对专业人员来说并不陌生,这些热拔插模块都可用于连接网络交换机和其他网络设备(如服务器或收发器)进行数据传输。但你了解这些模块的具体区别吗?QSFP28…

Codeforces Round #840 (Div. 2)

A. Absolute Maximization 题目链接:Problem - A - Codeforces 样例输入: 4 3 1 0 1 4 5 5 5 5 5 1 2 3 4 5 7 20 85 100 41 76 49 36样例输入: 1 0 7 125题意:给定一个长度为n的数组a[],我们可以对这个数组中的数进…