python json模块小技巧
python的json模块通常用于与序列化数据,如
def get_user_info(user_id):
res = {"user_id": 190013234,"nick": "havana"}
json_str = json.dumps(res)
return json_str
但是当要序列化的数据里面包含中文字符时,会变成这样
import json
res = {"user_id": 190027134, "nick": "愚蠢的萝卜"}
print(json.dumps(res))
# {"nick": "\u611a\u8822\u7684\u841d\u535c", "user_id": 190027134}
解决办法: 在json.dumps()里面加入一个参数ensure_ascii=False
import json
res = {"user_id": 190027134, "nick": "愚蠢的萝卜"}
print(json.dumps(res))
# {"nick": "愚蠢的萝卜", "user_id": 190027134}
这里有一个问题,如果json的结构很复杂,输出的结果就会很乱,不清晰,这是可以加入一个参数使其格式化
import json
res = {"user_id": 190027134, "nick": "愚蠢的萝卜"}
print(json.dumps(res))
# {
"nick": "愚蠢的萝卜",
"user_id": 190027134
}
如果序列化的数据里面有python的datetime.datetime类型,那么序列化会报错
import datetime
res = {"user_id": 190027134, "nick": "愚蠢的萝卜", "reg_ts": datetime.datetime.now()}
print(json.dumps(res, ensure_ascii=False, indent=4))
#TypeError: datetime.datetime(2019, 11, 3, 19, 8, 45, 987000) is not JSON serializable
解决办法是使用自定义的jsonencoder代替原生的jsonencoder
class DatetimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, datetime.date):
return obj.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, obj)
res = {"user_id": 190027134, "nick": "愚蠢的萝卜", "reg_ts": datetime.datetime.now(), "last_login_date": datetime.date.today()}
print(json.dumps(res, ensure_ascii=False, indent=4, cls=DatetimeEncoder))
# {
"nick": "愚蠢的萝卜",
"user_id": 190027134,
"reg_ts": "2019-11-03 20:09:55",
"last_login_date": "2019-11-03"
}
python json模块小技巧的更多相关文章
- python json模块(15)
JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级.跨平台.跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示 ...
- python random模块 - 小驹的专栏 - 博客频道 - CSDN.NET
python random模块 - 小驹的专栏 - 博客频道 - CSDN.NET python random模块 分类: python 2011-11-15 15:31 6037人阅读 评论(2) ...
- [转]Golang 中使用 JSON 的小技巧
taowen是json-iterator的作者. 序列化和反序列化需要处理JSON和struct的关系,其中会用到一些技巧. 原文 Golang 中使用 JSON 的小技巧是他的经验之谈,介绍了一些s ...
- Python: json模块实例详解
ref:https://www.jianshu.com/p/e29611244810 https://www.cnblogs.com/qq78292959/p/3467937.html https:/ ...
- python json模块使用详情
python其他知识目录 #json.数据交换用到json文件.json是特殊的字符串.访问网站,返回的就是json 1.json简介: 定义:JSON(JavaScript Object Notat ...
- JSON 的小技巧
有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用. 本来用一个json:",string" 就可以支持了,如果不知道golang的这些小技巧,就要大费周章 ...
- Python—json模块
用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps. ...
- python json模块 超级详解
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也 ...
- python: json模块 --JSON编码和解码
json 源代码: Lib/json/__init__.py json.dump() import json numbers = [1, 2, 3, 4] with open('linshi.py', ...
随机推荐
- 《你必须知道的495个C语言问题》读书笔记之第8-10章:字符串、布尔类型和预处理器
一.字符和字符串 1. Q:为什么strcat(string, '!')不行? A:strcat()用于拼接字符串,所以应该写成strcat(string, "!")." ...
- HanLP-朴素贝叶斯分类预测缺陷
文章整理自 baiziyu 的知乎专栏,感兴趣的朋友可以去关注下这位大神的专栏,很多关于自然语言处理的文章写的很不错.昨天看到他的分享的两篇关于朴素贝叶斯分类预测的文章,整理了一下分享给给大家,文章已 ...
- 剑指offer24:二叉树中和为输入整数值的所有路径。(注意: 在返回值的list中,数组长度大的数组靠前)
1 题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长 ...
- AC自动机fail树上dfs序建线段树+动态memset清空
题意:http://acm.hdu.edu.cn/showproblem.php?pid=4117 思路:https://blog.csdn.net/u013306830/article/detail ...
- PostgreSQL练习
学生表 Studentcreate table Student(Sid varchar(6), Sname varchar(10), Sage datetime, Ssex varchar(10)); ...
- Django-djangorestframework-异常模块-源码及自定义异常
目录 异常模块 为什么要自定义异常模块 常见的几种异常情况 异常模块源码分析 自定义 drf 异常处理 异常模块 为什么要自定义异常模块 所有经过 drf APIView 视图类产生的异常,都可以提供 ...
- 第十四章 ZYNQ TIMER定时器中断
上篇文章实现了了PS接受来自PL的中断,本片文章将在ZYNQ的纯PS里实现私有定时器中断.每隔一秒中断一次,在中断函数里计数加1,通过串口打印输出. 本文所使用的开发板是Miz702 PC 开发环 ...
- 【hash表】门票
问题 I: [哈希和哈希表]门票 题目描述 RPK要带MSH去一个更加神秘的地方!RPK带着MSH穿过广场,在第1618块砖上按下了一个按钮,在一面墙上随即出现了一个把手.RPK握住把手,打开了一扇石 ...
- vue中$router 与 $route区别
vue-router中经常会操作的两个对象\(route和\)router两个. 1.$route对象 $route对象表示当前的路由信息,包含了当前 URL 解析得到的信息.包含当前的路径,参数,q ...
- 服务器爆满:cannot create temp file for here-document: No space left on device
1 概述 服务器的磁盘空间被占满导致TAB补全指令失效(TAB会创建临时文件) cannot create temp file for here-document: No space left on ...