python -m json.tool 中文乱码 Format JSON with python

现在以 json 为数据传输格式的 RESTful 接口非常流行。为调试这样的接口,一个常用的办法是使用 curl 命令:

curl http://somehost.com/some-restful-api

对于返回的 json 字符串,一般在服务端不加处理的情况下,都是没有任何 '\t' 和 '\n' 的。为了方便查看,在 bash 上可以简单地对它进行格式化:

curl http://somehost.com/some-restful-api | python -mjson.tool

当然这要求机器上安装了 python,其实也就是利用了 json.tool 这个程序。

然而有时候还有一个问题,就是若返回的 json 字符串中包含中文,那么这样打印出来之后,中文会变成以 \u 开头的转义形式,从而让程序员无法直接观察到中文的内容。这并非是一个 bug,而是 json 本身的标准,它要求 json 的内容都是 ascii 编码的。标准的 json 编码器和解码器都会遵循这一点。

解决这个问题的办法是编辑 json.tool 程序,该程序存在于 python 系统库安装路径下的 json/tool.py。在 main 方法的最后,将:

json.dump(obj, outfile, sort_keys=True, indent=4)

修改为:

json.dump(obj, outfile, sort_keys=True, indent=4, ensure_ascii=False)

即让 json.tool 程序不强行保证 json 的内容都转义为 ascii 编码。修改后,再次运行

curl http://somehost.com/some-restful-api | python -mjson.tool

打印的结果即可正常包含中文。

不过这样还是会有问题,当返回的 json 字符串中包含了一些类似 emoji 表情这种无法正常编码的字符时,将结果打印到 bash 没问题,但是一旦打印到 less 或者文件上,则会提示编码错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)

解决办法,手动在 json.tool 程序中编码。在 json/tool.py 的最后,修改为(需提前 import codecs):

s = json.dumps(obj, sort_keys=True, indent=4, ensure_ascii=False)
outfile.write(codecs.encode(s, 'utf-8'))

这样就可以了。

gist: https://gist.github.com/nicky-zs/6af8a1afc771ad76d463

posted on 2017-03-09 14:40 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ruiy/p/6525591.html

python -m json.tool 中文乱码 Format JSON with python相关推荐

  1. python json.dumps慢_python json.dumps中文乱码问题解决

    json.dumps(var,ensure_ascii=False)并不能解决中文乱码的问题 json.dumps在不同版本的Python下会有不同的表现, 注意下面提到的中文乱码问题在Python3 ...

  2. freetds php mssql 中文乱码,PHP读取mssql json数据中文乱码的解决办法

    PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. ...

  3. QJsonObject写入读出json文件中文乱码问题解决

    问题的提出: QJsonObject写入读出json文件中文乱码. 复现步骤: 当json串很长时,我们一般采用流的形式写入文本,否则会截断导致写入不全,如下为将一个很长的json字符串写入qsMod ...

  4. ajax传输json数据格式乱码_解决Ajax加载JSon数据中文乱码问题

    一.问题描述 使用zTree的异步刷新父级菜单时,服务器返回中文乱码,但项目中使用了SpringMvc,已经对中文乱码处理,为什么还会出现呢? 此处为的异步请求的配置: Java代码 async: { ...

  5. php 数组转json乱码,php将数组转为json涌现中文乱码怎么办_后端开发

    php将数组转为json涌现中文乱码的处理方法:首先将数组中的每一个元素举行urlenconde()转码:然后再运用json_encode()函数把每一个元素转为json即可. 处理思绪: (引荐教程 ...

  6. SpringMVC开发框架中使用@ResponseBody注解后返回的json字符串中文乱码问题

    问题描述:在SpringMVC开发框架中使用@ResponseBody注解后返回的json字符串中文乱码 解决办法:@ResponseBody注解可以直接将返回类打包成json格式,但是如果返回值是S ...

  7. 解决网页打开json文件中文乱码情况

    解决网页打开json文件中文乱码情况 原因:保存json文件的格式不对 解决办法:另存json文件,保存的时候将编码类型修改为UTF-8,如图所示.将新json文件替换掉原json文件就好啦

  8. python2中文输出代码_解决vscode python print 输出窗口中文乱码的问题

    解决vscode python print 输出窗口中文乱码的问题 发布时间:2020-09-17 23:53:25 来源:脚本之家 阅读:119 一.搭建 python 环境 在 VSC 中点击 F ...

  9. python写入csv文件中文乱码解决方案

    python写入csv文件中文乱码解决方案 参考文章: (1)python写入csv文件中文乱码解决方案 (2)https://www.cnblogs.com/vsivn/p/6115537.html ...

最新文章

  1. 金融行业数据管理将何去何从?
  2. css 两边到中间 渐变_css3渐变过渡机制
  3. Make sure you've included captcha.urls as explained in the INSTALLATION
  4. WebSocket服务器TransactionID_SiteDetailMap的析构工作
  5. H5工程师在谷歌浏览器调试并开发原生APP项目的解决办法
  6. java下载文件夹_java如何通过共享目录下载文件夹(有子文件夹)到本地目录?...
  7. 同一台主机部署两个比特币钱包以及rpc服务的摘要
  8. Java冒泡,选择,插入排序算法
  9. 带格式文本html 直接复制粘贴,通过JS将带格式的文本复制到剪贴版的两种方法...
  10. java分层model_SpringMVC体系分层模式原理图解
  11. (9.19更新:八戒退款) 砸进七万块,没想到你是这样的猪八戒网
  12. 螺纹的规定,http://www.doc88.com/p-30089302852.html
  13. 2021年中国液晶显示行业产业链分析:关键零部件国产化推进液晶显示行业发展 [图]
  14. Apple iPhone 8G手机误升级至2.0降级破解日记
  15. 二维码和app扫码下载
  16. 【知识图谱】知识图谱数据构建的“硬骨头”,阿里工程师如何拿下?深度学习在知识图谱构建中的应用。
  17. 免费内网穿透端口映射工具-网络通
  18. Cycle3-Group1
  19. 全球与中国2-碘吡啶市场深度研究分析报告
  20. 利用API读取日文输入方法表(Romaji-Kana conversion table)

热门文章

  1. 设计模式之装饰模式学习笔记
  2. java如何保存初始化数据_java – 如何在JUnit测试中初始化数据
  3. 微信小程序登录,后端获取信息的问题
  4. kali linux 学习 NETCAT NC的使用
  5. devDependencies与dependencies (转载)
  6. ZooKeeper原理及使用
  7. mac 下搭建 php + apache + mysql 服务器(cool)
  8. PLSQL程序编写杂烦数据表信息编写批量排版
  9. LINQ中的Let关键字
  10. [异常处理]class kafka.common.UnknownTopicOrPartitionException (kafka.server.ReplicaFetcherThread)