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"
}

最新文章

  1. Rafy 领域实体框架 - 领域模型设计器(建模工具)设计方案
  2. 深入理解HTTP协议
  3. 2015年最全的移动WEB前端UI框架
  4. Orchard源码分析(4.1):Orchard.Environment.CollectionOrderModule类
  5. Linux下文件删除的原理
  6. apache本地网址配置
  7. 关于JFace中的向导式对话框(WizardDialog类)
  8. 初识jsp
  9. 项目打包 tomcat部署
  10. WPF中XAML中使用String.Format格式化字符串示例
  11. Oracle错误ORA-03113: end-of-file on communication channel处理办法
  12. String Stringbuilder Stringbuffer的区别
  13. Spring加载properties文件的属性的值
  14. javascript的BOM,DOM对象
  15. spring事务机制
  16. 火眼发布Windows攻击工具集
  17. spring cloud config git库文件搜索顺序
  18. 【 D3.js 入门系列 --- 2 】 怎样使用数据和选择元素
  19. 使用ShellExecute打开文件夹并选中文件
  20. git操作:在CentOS7上面搭建GitLab服务器

热门文章

  1. Java集合框架——Set接口
  2. 【jmeter测试范例】001——TCP测试
  3. java日志框架系列(2):logback框架详解
  4. ElasticSearch中term和match探索
  5. taskverse学习
  6. __formart__
  7. github骚操作
  8. .Net C# RSA签名和验签重写
  9. 怎样限制第三方Cookie
  10. python经典小程序集锦(一) 实现九九乘法表