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模块小技巧的更多相关文章

  1. python json模块(15)

    JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级.跨平台.跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示 ...

  2. python random模块 - 小驹的专栏 - 博客频道 - CSDN.NET

    python random模块 - 小驹的专栏 - 博客频道 - CSDN.NET python random模块 分类: python 2011-11-15 15:31 6037人阅读 评论(2) ...

  3. [转]Golang 中使用 JSON 的小技巧

    taowen是json-iterator的作者. 序列化和反序列化需要处理JSON和struct的关系,其中会用到一些技巧. 原文 Golang 中使用 JSON 的小技巧是他的经验之谈,介绍了一些s ...

  4. Python: json模块实例详解

    ref:https://www.jianshu.com/p/e29611244810 https://www.cnblogs.com/qq78292959/p/3467937.html https:/ ...

  5. python json模块使用详情

    python其他知识目录 #json.数据交换用到json文件.json是特殊的字符串.访问网站,返回的就是json 1.json简介: 定义:JSON(JavaScript Object Notat ...

  6. JSON 的小技巧

    有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用. 本来用一个json:",string" 就可以支持了,如果不知道golang的这些小技巧,就要大费周章 ...

  7. Python—json模块

    用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps. ...

  8. python json模块 超级详解

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也 ...

  9. python: json模块 --JSON编码和解码

    json 源代码: Lib/json/__init__.py json.dump() import json numbers = [1, 2, 3, 4] with open('linshi.py', ...

随机推荐

  1. confluence导出PDF格式文件不显示中文解决

    由于confluence导出PDF格式文件需要应用字体文件,下载字体文件在confluence管理员界面安装即可. 我这里使用从simhei.ttf楷体,可以从windowns主机里下载(c:/win ...

  2. studio git创建与删除标签(Tag)

    代码托管平台 码云 git工具 Git git上的标签一般是用于标记版本, 当发布新版本后,便将该版本的代码打上Tag,用以区别及管理 使用标签前需要将代码提交到马云上 以上是提交git. 创建并提交 ...

  3. 在Ubuntu中搭建Python3的虚拟环境并开始django项目

    搭建环境: 1.首先安装virtualenv: pip install virtualenv 2.创建虚拟环境:(指定安装Python3,若不写-p python3,默认安装Python2.7),en ...

  4. 设置springmvc全局异常

    设置全局异常,将异常信息指定内容展示给前端页面,保证程序的安全性 @Slf4j@Componentpublic class ExceptionResolver implements HandlerEx ...

  5. springCloud-Hystrix熔断器

    熔断器的原理很简单,如同电力过载保护器.它可以实现快速失败,如果它在一段时间内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可能会失败的操作, ...

  6. Python第三方库资源

    [转载]Python第三方库资源   转自:https://weibo.com/ttarticle/p/show?id=2309404129469920071093 参考:https://github ...

  7. Codeforces 1247F. Tree Factory

    传送门 正难则反,把链操作成树不好想,那么考虑一下如何把树变成链 每次操作相当于把一个兄弟变成儿子(我把你当兄弟你竟然想把我当儿子.jpg) 注意到每次操作最多只能使树的深度增加 $1$ 因为链的深度 ...

  8. EFcore的 基础理解<一>

    1.新建.netCore Web项目.这时候,还与EF没啥关系. 2.然后添加类 Bolg.和 Post   参考这里  https://docs.microsoft.com/en-us/ef/cor ...

  9. SpEL表达式总结

    前言SpEL(Spring Expression Language),即Spring表达式语言,是比JSP的EL更强大的一种表达式语言.为什么要总结SpEL,因为它可以在运行时查询和操作数据,尤其是数 ...

  10. 解决WinForm屏幕缩放适配只需修改两个Form的两个属性

    最近要做一个windows下截屏识别文字的程序,调试发现截取的图像显示不完整. 输出了Screen.PrimaryScreen.Bounds.Width获取的值,结果与实际分辨率不同,所以确定了与我的 ...