最後更新日期:2025 年 03 月 23 日

我們可以使用 json.dumps() 將資料轉化成 json 格式,並加上 indent 參數,使其以比較好看的方式顯示。

import json

data = [{'name': "Jonh", "age": 19}, {'name': 'Mary', 'age': 21}]
print(data)
print(json.dumps(data, indent=2))

這在英文資料時,沒有什麼問題,以下是其顯示的結果

[{'name': 'Jonh', 'age': 19}, {'name': 'Mary', 'age': 21}]
[
  {
    "name": "Jonh",
    "age": 19
  },
  {
    "name": "Mary",
    "age": 21
  }
]

但是如果資料裏有中文的話,狀況就有點不同

import json

data = [{'name': "張三", "age": 19}, {'name': '李四', 'age': 21}]
print(data)
print(json.dumps(data, indent=2))

其執行結果如下:

[{'name': '張三', 'age': 19}, {'name': '李四', 'age': 21}]
[
  {
    "name": "\u5f35\u4e09",
    "age": 19
  },
  {
    "name": "\u674e\u56db",
    "age": 21
  }
]

python 會將中文資料以 utf-8 編碼的方式顯示。

這其實在使用上沒什麼問題,但是如果我們想要他以中文的方式顯示,要如何做呢?

我們可以這樣處理

mport json

data = [{'name': "張三", "age": 19}, {'name': '李四', 'age': 21}]
print(data)
print(json.dumps(data, indent=2, ensure_ascii=False).encode('utf-8').decode())

輸出結果如下:

[{'name': '張三', 'age': 19}, {'name': '李四', 'age': 21}]          
[                                                               
  {                                                             
    "name": "張三",                                               
    "age": 19                                                   
  },                                                            
  {                                                             
    "name": "李四",                                               
    "age": 21                                                   
  }                                                             
]                                                               

ensure_ascii 這個值,預設是 True,也就是讓函式執行的結果,要確定可以用 ascii 編碼來表示。

參考資料

https://docs.python.org/zh-tw/3.13/library/json.html

https://zhuanlan.zhihu.com/p/37504880

https://blog.csdn.net/qq_26442553/article/details/94440502

https://stackoverflow.com/questions/18337407/saving-utf-8-texts-with-json-dumps-as-utf-8-not-as-a-u-escape-sequence

Last modified: 2025-03-23

Author

Comments

Write a Reply or Comment

Your email address will not be published.