Python中將JSON數(shù)據(jù)寫入文件的實(shí)現(xiàn)方法
Python中如何將JSON數(shù)據(jù)寫入文件
技術(shù)背景
在Python開發(fā)中,JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,常用于前后端數(shù)據(jù)交互、配置文件存儲(chǔ)等場(chǎng)景。當(dāng)我們需要將Python中的字典或列表等數(shù)據(jù)以JSON格式保存到文件時(shí),就需要掌握如何將JSON數(shù)據(jù)寫入文件的方法。
實(shí)現(xiàn)步驟
1. 導(dǎo)入json模塊
Python的json模塊提供了處理JSON數(shù)據(jù)的功能,我們需要先導(dǎo)入該模塊。
import json
2. 準(zhǔn)備JSON數(shù)據(jù)
JSON數(shù)據(jù)通常以字典或列表的形式存在于Python中。例如:
data = {
"name": "John",
"age": 30,
"city": "New York"
}
3. 打開文件并寫入JSON數(shù)據(jù)
使用open()函數(shù)打開文件,然后使用json.dump()或json.dumps()方法將JSON數(shù)據(jù)寫入文件。
使用json.dump()方法
json.dump()方法將Python對(duì)象直接寫入文件對(duì)象。
with open('data.json', 'w') as f:
json.dump(data, f)
使用json.dumps()方法
json.dumps()方法將Python對(duì)象轉(zhuǎn)換為JSON字符串,然后再寫入文件。
json_string = json.dumps(data)
with open('data.json', 'w') as f:
f.write(json_string)
核心代碼
以下是一個(gè)完整的示例代碼,展示了如何將JSON數(shù)據(jù)寫入文件,并對(duì)文件進(jìn)行讀取驗(yàn)證:
import json
# 準(zhǔn)備JSON數(shù)據(jù)
data = {
"a list": [1, 42, 3.141, 1337, 'help', '€'],
"a string": "bla",
"another dict": {
"foo": "bar",
"key": "value",
"the answer": 42
}
}
# 寫入JSON文件
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
# 讀取JSON文件
with open('data.json') as data_file:
data_loaded = json.load(data_file)
print(data == data_loaded)
最佳實(shí)踐
提高可讀性
為了使生成的JSON文件更易于閱讀,可以在json.dump()或json.dumps()方法中添加indent和sort_keys參數(shù)。
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4, sort_keys=True)
處理非ASCII字符
如果JSON數(shù)據(jù)中包含非ASCII字符,建議使用ensure_ascii=False參數(shù),以避免字符被轉(zhuǎn)義。
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False)
常見問題
1. TypeError: must be string or buffer, not dict
當(dāng)直接將Python字典寫入文件時(shí),會(huì)出現(xiàn)該錯(cuò)誤。因?yàn)槲募懭氩僮餍枰址蜃止?jié)類型的數(shù)據(jù),而字典不是字符串類型。解決方法是使用json.dump()或json.dumps()方法將字典轉(zhuǎn)換為JSON字符串。
2. 非ASCII字符被轉(zhuǎn)義
如果不使用ensure_ascii=False參數(shù),非ASCII字符會(huì)被轉(zhuǎn)義為Unicode編碼。例如:
import json
data = {"price": "€10"}
print(json.dumps(data)) # 輸出: '{"price": "\\u20ac10"}'
print(json.dumps(data, ensure_ascii=False)) # 輸出: '{"price": "€10"}'
3. 處理NumPy數(shù)據(jù)類型
如果JSON數(shù)據(jù)中包含NumPy數(shù)據(jù)類型,json.dumps()方法會(huì)拋出TypeError異常??梢宰远x一個(gè)JSON編碼器來處理NumPy數(shù)據(jù)類型。
import json
import numpy as np
class NumpyEncoder(json.JSONEncoder):
""" Special json encoder for np types """
def default(self, obj):
if isinstance(obj, (np.int_, np.intc, np.intp, np.int8,
np.int16, np.int32, np.int64, np.uint8,
np.uint16, np.uint32, np.uint64)):
return int(obj)
elif isinstance(obj, (np.float_, np.float16, np.float32,
np.float64)):
return float(obj)
elif isinstance(obj, (np.ndarray,)):
return obj.tolist()
return json.JSONEncoder.default(self, obj)
my_data = {'array': np.array([1, 2, 3])}
with open('my_filename.json', 'w') as f:
json.dump(my_data, f, indent=4, cls=NumpyEncoder)
到此這篇關(guān)于Python中將JSON數(shù)據(jù)寫入文件的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Python將JSON數(shù)據(jù)寫入文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python計(jì)算階乘和的方法(1!+2!+3!+...+n!)
今天小編就為大家分享一篇python計(jì)算階乘和的方法(1!+2!+3!+...+n!),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
創(chuàng)建Shapefile文件并寫入數(shù)據(jù)的例子
今天小編就為大家分享一篇?jiǎng)?chuàng)建Shapefile文件并寫入數(shù)據(jù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
詳解如何優(yōu)化和調(diào)整Python中Scrapy的性能
在本篇高級(jí)教程中,我們將深入探討如何優(yōu)化和調(diào)整Scrapy爬蟲的性能,以及如何處理更復(fù)雜的抓取任務(wù),如登錄,處理Cookies和會(huì)話,以及避免爬蟲被網(wǎng)站識(shí)別和封鎖,需要的朋友可以參考下2023-09-09
Python中設(shè)置變量作為默認(rèn)值時(shí)容易遇到的錯(cuò)誤
這篇文章主要介紹了Python中設(shè)置變量作為默認(rèn)值時(shí)容易遇到的錯(cuò)誤,這是Python新手經(jīng)常容易碰到的問題,且往往不會(huì)被輕易察覺到,需要的朋友可以參考下2015-04-04
Python爬蟲小技巧之偽造隨機(jī)的User-Agent
這篇文章主要給大家介紹了關(guān)于Python爬蟲小技巧之偽造隨機(jī)的User-Agent的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09

