姊妹篇:【python】json轉成成yaml
json數據
{"name": "張三","age": 30,"isMarried": false,"children": [{"name": "小王","age": 5},{"name": "小李","age": 3}],"address": {"street": "北京路123號","city": "北京市","postalCode": "100000"},"email": "zhangsan@example.com","phoneNumbers": [{"type": "home","number": "2341234"},{"type": "office","number": "5678901"}],"login": {"username": "zhangsan","password": "password123"},"cart": [{"product": {"name": "筆記本電腦","price": 1199.99,"quantity": 2}},{"product": {"name": "智能手機","price": 599.99,"quantity": 1}}]
}
code v1
# -- coding:utf-8 --
import json, yaml, osBASE_DIR = os.path.dirname(os.path.abspath(__file__))def jsonToYaml(jsonPath, yamlPath):with open(jsonPath, "r", encoding='utf-8') as f:f_json = json.load(f)with open(yamlPath, "w", encoding='utf-8') as f:f_yaml = yaml.dump(f_json)yaml.dump(yaml.safe_load(f_yaml), f, sort_keys=False)if __name__ == '__main__':jsonPath = "data.json"yamlPath = "data.yaml"jsonPath = os.path.join(BASE_DIR, jsonPath)yamlPath = os.path.join(BASE_DIR, yamlPath)jsonToYaml(jsonPath, yamlPath)
轉化后:
轉化后發現中文顯示不是那么友善,全變成了:\u5317\u4EAC\u8DEF123\u53F7,這種形式;
主要原因:
在PyYAML中,默認的編碼是UTF-8,但是如果你的字符串包含非UTF-8字符,比如中文,你可能需要指定一個不同的編碼。在你的代碼中,你可能需要指定在寫入YAML文件時使用的編碼是UTF-8,而不是默認的編碼。
另外,當你使用 yaml.dump() 時,如果你想要保持中文等非ASCII字符的可讀性,你應該使用 default_flow_style=False 參數,這樣YAML文件將以塊樣式編寫,而不是流動樣式。
修改后的代碼:
# -- coding:utf-8 --
import json, yaml, osBASE_DIR = os.path.dirname(os.path.abspath(__file__))def jsonToYaml(jsonPath, yamlPath):with open(jsonPath, "r", encoding='utf-8') as f:f_json = json.load(f)with open(yamlPath, "w", encoding='utf-8') as f:f_yaml = yaml.dump(f_json)# yaml.dump(yaml.safe_load(f_yaml), f, sort_keys=False)# 使用safe_dump以避免潛在的安全風險,除非你完全信任源數據yaml.safe_dump(f_json, f, default_flow_style=False, allow_unicode=True)if __name__ == '__main__':jsonPath = "data.json"yamlPath = "data.yaml"jsonPath = os.path.join(BASE_DIR, jsonPath)yamlPath = os.path.join(BASE_DIR, yamlPath)jsonToYaml(jsonPath, yamlPath)
轉換后的結果:
address:city: 北京市postalCode: '100000'street: 北京路123號
age: 30
cart:
- product:name: 筆記本電腦price: 1199.99quantity: 2
- product:name: 智能手機price: 599.99quantity: 1
children:
- age: 5name: 小王
- age: 3name: 小李
email: zhangsan@example.com
isMarried: false
login:password: password123username: zhangsan
name: 張三
phoneNumbers:
- number: '2341234'type: home
- number: '5678901'type: office
在本文中,我們探討了技術性文章博客的重要性,它不僅能提升個人品牌,還能促進知識共享和技能成長。通過選擇合適的平臺、保持專業性和真誠性,并利用SEO和社交媒體策略來提高可見性,任何人都可以成功地撰寫和推廣技術性文章博客。記住,持續學習和實踐是提升技術能力的的關鍵,而寫作是這一旅程中的寶貴工具。讓我們開始撰寫影響未來的技術故事吧!