Python實(shí)現(xiàn)將一個(gè)帶鍵值特征的JSON數(shù)組轉(zhuǎn)換為JSON對(duì)象
核心實(shí)現(xiàn)方法
方法 1:循環(huán)遍歷構(gòu)建字典(基礎(chǔ)高效)
import json
# 原始 JSON 數(shù)組(示例)
json_array = [
{"key": "name", "value": "Alice"},
{"key": "age", "value": 25},
{"key": "city", "value": "Beijing"}
]
# 轉(zhuǎn)換為字典對(duì)象
result_dict = {}
for item in json_array:
result_dict[item["key"]] = item["value"]
# 轉(zhuǎn)為 JSON 字符串(可選)
json_output = json.dumps(result_dict, indent=4, ensure_ascii=False)
print(json_output)
輸出:
{
"name": "Alice",
"age": 25,
"city": "Beijing"
}
特點(diǎn):
- 邏輯清晰,直接遍歷數(shù)組,逐項(xiàng)提取
key和value - 適合初學(xué)者或需要顯式控制流程的場(chǎng)景
方法 2:字典推導(dǎo)式(簡(jiǎn)潔優(yōu)雅)
result_dict = {item["key"]: item["value"] for item in json_array}
json_output = json.dumps(result_dict, indent=4)
特點(diǎn):
- 代碼更簡(jiǎn)潔,單行完成轉(zhuǎn)換
- 適用于 Python 3.6+ 環(huán)境
方法 3:使用reduce函數(shù)(函數(shù)式編程)
from functools import reduce
result_dict = reduce(
lambda obj, item: {**obj, item["key"]: item["value"]},
json_array,
{}
)
特點(diǎn):
- 函數(shù)式編程風(fēng)格,適合復(fù)雜數(shù)據(jù)流處理
- 可結(jié)合其他高階函數(shù)(如
filter)進(jìn)行數(shù)據(jù)預(yù)處理
關(guān)鍵注意事項(xiàng)
1.鍵名重復(fù)問題:
若數(shù)組中存在重復(fù)的 key,后出現(xiàn)的值會(huì)覆蓋先前的值。需提前檢查:
keys = [item["key"] for item in json_array]
if len(keys) != len(set(keys)):
print("存在重復(fù)鍵名!")
2.特殊數(shù)據(jù)類型處理:
value 可能是嵌套對(duì)象或數(shù)組,轉(zhuǎn)換時(shí)會(huì)保留原始結(jié)構(gòu)
若需自定義序列化(如處理日期),使用 default 參數(shù):
json.dumps(result_dict, default=lambda x: x.isoformat() if hasattr(x, 'isoformat') else str(x))
3.輸出格式化優(yōu)化:
indent=4:美化輸出,帶縮進(jìn)ensure_ascii=False:支持中文等非 ASCII 字符sort_keys=True:按鍵名字母排序輸出
完整流程示例
import json
# 輸入數(shù)據(jù)
json_array = [
{"key": "product", "value": "筆記本電腦"},
{"key": "price", "value": 5999},
{"key": "in_stock", "value": True},
{"key": "specs", "value": {"CPU": "i7", "RAM": "16GB"}}
]
# 轉(zhuǎn)換為字典
result_dict = {item["key"]: item["value"] for item in json_array}
# 輸出為格式化的 JSON 字符串
json_output = json.dumps(
result_dict,
indent=4,
ensure_ascii=False,
sort_keys=True
)
print(json_output)
輸出:
{
"in_stock": true,
"price": 5999,
"product": "筆記本電腦",
"specs": {
"CPU": "i7",
"RAM": "16GB"
}
}
應(yīng)用場(chǎng)景與擴(kuò)展
API 數(shù)據(jù)處理:將從服務(wù)端獲取的數(shù)組結(jié)構(gòu)響應(yīng)轉(zhuǎn)為易操作的字典
配置文件生成:將程序中的配置列表轉(zhuǎn)為 JSON 配置文件
結(jié)合 Pandas:若數(shù)據(jù)源是 DataFrame,可直接導(dǎo)出為 JSON:
import pandas as pd
df = pd.DataFrame(json_array)
df.set_index("key")["value"].to_dict() # 直接轉(zhuǎn)為字典
總結(jié)
| 方法 | 適用場(chǎng)景 | 優(yōu)勢(shì) |
|---|---|---|
| 循環(huán)遍歷 | 兼容舊版 Python,邏輯清晰 | 易于調(diào)試,顯式控制流程 |
| 字典推導(dǎo)式 | Python 3.6+,代碼簡(jiǎn)潔化 | 高效單行實(shí)現(xiàn) |
| reduce 函數(shù) | 函數(shù)式編程場(chǎng)景,復(fù)雜數(shù)據(jù)處理 | 支持鏈?zhǔn)讲僮骱皖A(yù)處理 |
選擇方法時(shí):
- 優(yōu)先推薦 字典推導(dǎo)式(簡(jiǎn)潔高效);
- 若需兼容性或特殊處理,用 循環(huán)遍歷;
- 高級(jí)場(chǎng)景可嘗試 reduce 函數(shù) 或結(jié)合 json.dumps 的參數(shù)定制輸出格式。
到此這篇關(guān)于Python實(shí)現(xiàn)將一個(gè)帶鍵值特征的JSON數(shù)組轉(zhuǎn)換為JSON對(duì)象的文章就介紹到這了,更多相關(guān)Python JSON數(shù)組轉(zhuǎn)JSON對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python利用Selenium實(shí)現(xiàn)簡(jiǎn)單的中英互譯功能
Selenium 是一個(gè)用于 Web 應(yīng)用程序測(cè)試的工具,最初是為網(wǎng)站自動(dòng)化測(cè)試而開發(fā)的,可以直接運(yùn)行在瀏覽器上,是 Python 的一個(gè)第三方庫(kù),對(duì)外提供的接口能夠操作瀏覽器,從而讓瀏覽器完成自動(dòng)化的操作,本文介紹了如何利用Python中的Selenium實(shí)現(xiàn)簡(jiǎn)單的中英互譯2024-08-08
使用Python簡(jiǎn)單實(shí)現(xiàn)去除彩色水印
這篇文章主要為大家詳細(xì)介紹了如何使用Python簡(jiǎn)單實(shí)現(xiàn)去除彩色水印效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
Python中11種NumPy高級(jí)操作總結(jié)
熬夜整了了11種Numpy的高級(jí)操作,每一種都有參數(shù)解釋與小例子輔助說明。文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2022-05-05
用python一行代碼得到數(shù)組中某個(gè)元素的個(gè)數(shù)方法
今天小編就為大家分享一篇用python一行代碼得到數(shù)組中某個(gè)元素的個(gè)數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
解決Python 中JSONDecodeError: Expecting value:&n
這篇文章主要介紹了解決Python 中JSONDecodeError: Expecting value: line 1 column 1 (char 0)錯(cuò)誤問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
keras訓(xùn)練曲線,混淆矩陣,CNN層輸出可視化實(shí)例
這篇文章主要介紹了keras訓(xùn)練曲線,混淆矩陣,CNN層輸出可視化實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python網(wǎng)絡(luò)編程之xmlrpc模塊
這篇文章介紹了Python網(wǎng)絡(luò)編程之xmlrpc模塊,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05

