python之json格式解析與轉(zhuǎn)換方式
python json格式解析與轉(zhuǎn)換
使用Python標(biāo)準(zhǔn)庫: json 實(shí)現(xiàn)json格式字符串與Python對(duì)象的互轉(zhuǎn)。
但注意,只有有效的json格式字符串才能夠轉(zhuǎn)換為Python對(duì)象。
OK,問題來了,什么叫有效的json格式字符串?
- 字符串必須用雙引號(hào)
- 在同一個(gè)對(duì)象中,所有的鍵必須是唯一的
- 最后一個(gè)元素后面不應(yīng)有逗號(hào)
- 字符串中不應(yīng)包含注釋
1、json格式字符串轉(zhuǎn)python類型
主要用到兩個(gè)函數(shù):
- json.loads()
- loads為'load string'的縮寫,用來解析json格式的字符串(該字符串要包含有效的json數(shù)據(jù)),返回python對(duì)象(列表或字典)
import json # json格式的字符串 可解析為python列表 json_data_list = '[{"name": ["Alice", "Bob"], "age": [25, 30]}]' # json格式的字符串 可解析為python字典 json_data_dict = '{"name": ["Alice", "Bob"], "age": [25, 30]}' # 解析json格式的字符串 parse_json_data_list = json.loads(json_data_list) parse_json_data_dict = json.loads(json_data_dict) print(f'json_data_list的類型為: {type(json_data_list)}; parse_json_data_list的類型為: {type(parse_json_data_list)}') print(f'json_data_dict的類型為: {type(json_data_dict)}; parse_json_data_dict的類型為: {type(parse_json_data_dict)}') # 轉(zhuǎn)為python類型之后,比如轉(zhuǎn)為python字典,我們就可以使用dict相關(guān)方法進(jìn)行數(shù)據(jù)的提取等操作
- json.load()
- load用于從一個(gè)文件中讀取json數(shù)據(jù),接收一個(gè)文件對(duì)象,返回一個(gè)python對(duì)象
如讀取txt文件中存儲(chǔ)的字符串形式的json數(shù)據(jù),如下圖
import json # open函數(shù)返回一個(gè)文件對(duì)象,并將其賦給f with open(r'test_json.txt', 'r') as f: json_content = json.load(f) print(json_content) print(type(json_content))
2、python對(duì)象轉(zhuǎn)為json格式字符串
主要用到兩個(gè)函數(shù):
- json.dumps
- dumps為'dump string'的縮寫,用于將python對(duì)象轉(zhuǎn)為json格式的字符串
import json # python對(duì)象 data_list = [1, 2, 3] data_dict = {"name": ["Alice", "Bob"], "age": [25, 30]} # 轉(zhuǎn)為json對(duì)象 json_data_list = json.dumps(data_list) json_data_dict = json.dumps(data_dict) print(f'data_list的類型為: {type(data_list)}; json_data_list的類型為: {type(json_data_list)}') print(f'data_dict的類型為: {type(data_dict)}; json_data_dict的類型為: {type(json_data_dict)}')
- json.dump
- dump用于將 python 對(duì)象轉(zhuǎn)換為json格式,并將結(jié)果寫入文件,它需要一個(gè)文件對(duì)象作為輸出目標(biāo)
import json data_dict = {"name": ["Alice", "Bob"], "age": [25, 30]} # 創(chuàng)建一個(gè)test_json.json文件(w: 文件不存在則創(chuàng)建) with open(r'test_json.json', 'w') as f: # indent: 該參數(shù)用來控制縮進(jìn) 用來美化json使其有清晰的層次結(jié)構(gòu) json.dump(data_dict, f, indent=4)
3、json轉(zhuǎn)DataFrame
直接使用pd.read_json函數(shù)讀取json格式字符串、json文件,然后轉(zhuǎn)為DataFrame
import pandas as pd from io import StringIO # 讀取JSON數(shù)據(jù)為DataFrame對(duì)象 json_data = '{"name": ["Alice", "Bob"], "age": [25, 30]}' # read_json 函數(shù)通常期望接收一個(gè)文件路徑或文件對(duì)象,而不是字符串, # 所以這里使用了StringIO 來將字符串json_data 轉(zhuǎn)換成一個(gè)類似文件的對(duì)象,這樣read_json 就可以從中讀取數(shù)據(jù) df = pd.read_json(StringIO(json_data)) df
或直接讀取json文件
import pandas as pd data = pd.read_json(r'test_json.json') data
4、DataFrame轉(zhuǎn)json
import pandas as pd data = pd.DataFrame( { 'value': range(10), 'time': pd.date_range('2024-01-01', freq='D', periods=10), 'flag': list('abcdefghij') } ) data.to_json('test_to_json.json', indent=4) # data.to_json('test_to_json.json', indent=4, date_unit='s') date_unit='s'可將時(shí)間戳轉(zhuǎn)換為以秒為單位的時(shí)間戳
部分輸出結(jié)果如下,
同時(shí)可以使用orient(其參數(shù)可以取:split、records、index、columns、values、table)參數(shù)改變輸出數(shù)據(jù)結(jié)構(gòu),大家可以嘗試一下各個(gè)參數(shù)取值出來的效果,下面展示orient='records'的輸出效果。
import pandas as pd data = pd.DataFrame( { 'value': range(10), 'time': pd.date_range('2024-01-01', freq='D', periods=10), 'flag': list('abcdefghij') } ) data.to_json('test_to_json.json', indent=4, orient='records')
部分輸出結(jié)果如下,輸出是一個(gè) JSON 對(duì)象數(shù)組,其中每個(gè)對(duì)象對(duì)應(yīng) DataFrame 的一行。
同時(shí)注意到,時(shí)間格式在轉(zhuǎn)為json之后,變成了時(shí)間戳,怎么保留原來的時(shí)間格式呢?
那就需要在轉(zhuǎn)為json之前,先把時(shí)間格式轉(zhuǎn)為字符串格式,再轉(zhuǎn)為json
import pandas as pd data = pd.DataFrame( { 'value': range(10), 'time': pd.date_range('2024-01-01', freq='D', periods=10), 'flag': list('abcdefghij') } ) data['time'] = data['time'].astype(str) data.to_json('test_to_json.json', indent=4, orient='records')
部分輸出結(jié)果為,
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python進(jìn)行物聯(lián)網(wǎng)設(shè)備的控制與數(shù)據(jù)收集
Python作為一種高效且易于學(xué)習(xí)的編程語言,已經(jīng)成為開發(fā)物聯(lián)網(wǎng)應(yīng)用的首選語言之一,本文將探討如何使用Python進(jìn)行物聯(lián)網(wǎng)設(shè)備的控制與數(shù)據(jù)收集,并提供相應(yīng)的代碼示例,需要的朋友可以參考下2024-05-05使用pandas 將DataFrame轉(zhuǎn)化成dict
今天小編就為大家分享一篇使用pandas 將DataFrame轉(zhuǎn)化成dict,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python django框架 web端視頻加密的實(shí)例詳解
這篇文章主要介紹了Python django框架 web端視頻加密,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11如何解決Python:報(bào)錯(cuò)[Errno 2]No such file or&nb
介紹了Python文件讀取操作時(shí)常見的錯(cuò)誤原因及解決方法,主要錯(cuò)誤原因包括路徑拼寫錯(cuò)誤、工作目錄與相對(duì)路徑不匹配以及文件不存在,解決方法有使用絕對(duì)路徑和動(dòng)態(tài)獲取腳本路徑,其他注意事項(xiàng)包括驗(yàn)證文件路徑與名稱、理解工作目錄與相對(duì)路徑2025-02-02python中強(qiáng)制關(guān)閉線程與協(xié)程與進(jìn)程方法
python使用中多線程、多進(jìn)程、多協(xié)程使用是比較常見的。那么如果在多線程等的使用,我們這個(gè)時(shí)候我們想從外部強(qiáng)制殺掉該線程請(qǐng)問如何操作?這篇文章帶你介紹,感興趣的同學(xué)可以參考閱讀2023-03-03