python一行式解析json怎么避免中文转化为unicode编码?

比如有一个json文件test.json,内容为:
{"one":{"two":"中文"}}
想要分层次的查看,于是:
cat test.json | python3 -m json.tool
然后输出为:

{
    "one": {
        "two": "\u4e2d\u6587"
    }
}

然而中文已经转换成了unicode编码,如何避免这种转换?

阅读 14.9k
7 个回答

必须转!
json是用于交换数据的,Unicode等 多字节字符 会在传输过程中出错。
"\u4e2d\u6587" ,严格的说,这不是utf格式编码,而是 unicode转义


更新

repr()保存json对象

>>> import json
>>> j = json.loads('{"one":{"two":"中文"}}')
>>> print(j)
{'one': {'two': '中文'}}
>>> j['one']['two']
'中文'
>>> d =json.dumps(j)
>>> print(d)
{"one": {"two": "\u4e2d\u6587"}}
>>> r = repr(j)
>>> print(r)
{'one': {'two': '中文'}}
>>> with open('test.json','w') as w:
    w.write(r)

不知道什么原因,我看不到评论。
你的意思是,只想在控制台显示一下json文件内容,是吧~
那你就把 json模块下的 tool.py 复制出来,改个名字,例如:my_json_tool.py
然后在 main() 里的 调用dump()方法处,给它添加个 参数 ensure_ascii=False
控制台命令也要作相应修改。

自问自答吧,在python的标准库json文件夹下有个tool.py文件,更改其中调用的json.dump函数,传一个ensure_ascii = False参数即可,然而这种方法更改了标准库,不知道有没有其他更好的方法。

其实楼主的意思的是想要在命令行中快速地查看一个没有格式化的json文件。
但是由于Python3 json.tool 工具会将中文输出为unicode编码格式,所以无法查看。

就在刚才,我发现linux发行版自带一个叫做 json_pp 的工具,可以用来以格式化的方式输出json字符串,而且不会编码中文。

PS:ubuntu 16 、CentOS8/7 都自带这个工具

$cat test.json
{"a": 1, "b": 2, "c":[1,2,3,4,5],"d":{"hello":"world","good":"nice"}}
$cat test.json|json_pp
{
   "b" : 2,
   "a" : 1,
   "c" : [
      1,
      2,
      3,
      4,
      5
   ],
   "d" : {
      "hello" : "world",
      "good" : "nice"
   }
}

在输出的时候用utf8编码试试

新手上路,请多包涵

.encode('utf-8').decode('unicode_escape') dumps后

可以使用pprint

Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> import pprint
>>> j = json.loads('{"one":{"two":"中文"}}')
>>> pprint.pprint(j)
{'one': {'two': '中文'}}
>>> j = json.loads('{"one": {"two": "\u4e2d\u6587"}}')
>>> pprint.pprint(j)
{'one': {'two': '中文'}}
推荐问题