最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python進行JSON數(shù)據(jù)處理的全攻略

 更新時間:2025年07月08日 09:24:49   作者:橘子編程  
JSON是“JavaScript Object Notation”的縮寫,它本來是JavaScript語言中創(chuàng)建對象的一種字面量語法,現(xiàn)在已經(jīng)被廣泛的應用于跨語言跨平臺的數(shù)據(jù)交換,下面我們就來看看Python進行JSON數(shù)據(jù)處理的相關策略吧

JSON概述

在Python中,我們可以將程序中的數(shù)據(jù)以JSON格式進行保存。JSON是“JavaScript Object Notation”的縮寫,它本來是JavaScript語言中創(chuàng)建對象的一種字面量語法,現(xiàn)在已經(jīng)被廣泛的應用于跨語言跨平臺的數(shù)據(jù)交換。使用JSON的原因非常簡單,因為它結構緊湊而且是純文本,任何操作系統(tǒng)和編程語言都能處理純文本,這就是實現(xiàn)跨語言跨平臺數(shù)據(jù)交換的前提條件。目前JSON基本上已經(jīng)取代了XML(可擴展標記語言)作為異構系統(tǒng)間交換數(shù)據(jù)的事實標準。可以在JSON的官方網(wǎng)站找到更多關于JSON的知識,這個網(wǎng)站還提供了每種語言處理JSON數(shù)據(jù)格式可以使用的工具或三方庫。

在JSON中使用的數(shù)據(jù)類型(JavaScript數(shù)據(jù)類型)和Python中的數(shù)據(jù)類型也是很容易找到對應關系的,大家可以看看下面的兩張表。

表1:JavaScript數(shù)據(jù)類型(值)對應的Python數(shù)據(jù)類型(值)

JSONPython
objectdict
arraylist
stringstr
numberint / float
number(real)float
boolean(true/ false)bool (True/ False)
nullNone

表2:Python數(shù)據(jù)類型(值)對應的JavaScript數(shù)據(jù)類型(值)

PythonJSON
dictobject
list/ tuplearray
strstring
int/ floatnumber
bool(True/ False)boolean(true / false)
Nonenull

python 中json模塊有四個比較重要的函數(shù),分別是:

  • dump - 將Python對象按照JSON格式序列化到文件中
  • dumps - 將Python對象處理成JSON格式的字符串
  • load - 將文件中的JSON數(shù)據(jù)反序列化成對象
  • loads - 將字符串的內容反序列化成Python對象

1. 基本JSON操作

import json
 
# Python字典數(shù)據(jù)
data = {
    "name": "張三",
    "age": 30,
    "is_student": False,
    "courses": ["數(shù)學", "英語", "計算機"],
    "address": {
        "street": "人民路123號",
        "city": "北京"
    }
}
 
# 將Python對象轉換為JSON字符串
json_string = json.dumps(data, indent=4, ensure_ascii=False)
print("JSON字符串:")
print(json_string)
 
 
# 將JSON字符串保存到文件
with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, indent=4, ensure_ascii=False)
 
# 從文件讀取JSON數(shù)據(jù)
with open('data.json', 'r', encoding='utf-8') as f:
    loaded_data = json.load(f)
 
print("\n從文件加載的數(shù)據(jù):")
print(loaded_data)

2、復雜數(shù)據(jù)類型處理

import json
from datetime import datetime
 
# 包含復雜數(shù)據(jù)類型的Python對象
complex_data = {
    "timestamp": datetime.now(),
    "set_data": {1, 2, 3},
    "custom_object": type('CustomClass', (), {'attr': 'value'})
}
 
# 自定義JSON編碼器處理復雜類型
class ComplexEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        elif isinstance(obj, set):
            return list(obj)
        elif hasattr(obj, '__dict__'):
            return obj.__dict__
        return super().default(obj)
 
# 序列化復雜對象
json_string = json.dumps(complex_data, cls=ComplexEncoder, indent=2)
print("復雜對象JSON:")
print(json_string)

3. JSON配置文件管理

import json
import os
 
# 配置文件路徑
CONFIG_FILE = 'config.json'
 
# 默認配置
default_config = {
    "app_name": "MyApp",
    "version": "1.0",
    "settings": {
        "theme": "dark",
        "language": "zh-CN",
        "auto_update": True
    }
}
 
# 檢查并創(chuàng)建配置文件
if not os.path.exists(CONFIG_FILE):
    with open(CONFIG_FILE, 'w', encoding='utf-8') as f:
        json.dump(default_config, f, indent=4)
    print("已創(chuàng)建默認配置文件")
 
# 讀取配置文件
with open(CONFIG_FILE, 'r', encoding='utf-8') as f:
    config = json.load(f)
 
print("當前配置:")
print(json.dumps(config, indent=4, ensure_ascii=False))
 
# 修改并保存配置
config['settings']['theme'] = 'light'
config['version'] = '1.1'
 
with open(CONFIG_FILE, 'w', encoding='utf-8') as f:
    json.dump(config, f, indent=4)
 
print("\n配置已更新")

4. 處理JSON API響應

import json
import urllib.request
from pprint import pprint
 
# 從API獲取JSON數(shù)據(jù)
def fetch_json_data(url):
    with urllib.request.urlopen(url) as response:
        data = json.loads(response.read().decode('utf-8'))
    return data
 
# 示例API (JSONPlaceholder)
api_url = "https://jsonplaceholder.typicode.com/users/1"
 
try:
    user_data = fetch_json_data(api_url)
    print("從API獲取的用戶數(shù)據(jù):")
    pprint(user_data)
    
    # 保存到本地
    with open('user_data.json', 'w', encoding='utf-8') as f:
        json.dump(user_data, f, indent=2, ensure_ascii=False)
    
    print("\n數(shù)據(jù)已保存到 user_data.json")
except Exception as e:
    print(f"獲取數(shù)據(jù)時出錯: {e}")

5. JSON數(shù)據(jù)驗證

import json
from jsonschema import validate, ValidationError
 
# JSON數(shù)據(jù)
user_data = {
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com",
    "age": 30
}
 
# JSON Schema定義
schema = {
    "type": "object",
    "properties": {
        "id": {"type": "number"},
        "name": {"type": "string"},
        "email": {"type": "string", "format": "email"},
        "age": {"type": "number", "minimum": 18}
    },
    "required": ["id", "name", "email"]
}
 
# 驗證JSON數(shù)據(jù)
try:
    validate(instance=user_data, schema=schema)
    print("JSON數(shù)據(jù)驗證通過")
except ValidationError as e:
    print(f"驗證錯誤: {e}")

6.包管理工具pip

Python標準庫中的json模塊在數(shù)據(jù)序列化和反序列化時性能并不是非常理想,為了解決這個問題,可以使用三方庫ujson來替換json。所謂三方庫,是指非公司內部開發(fā)和使用的,也不是來自于官方標準庫的Python模塊,這些模塊通常由其他公司、組織或個人開發(fā),所以被稱為三方庫。雖然Python語言的標準庫雖然已經(jīng)提供了諸多模塊來方便我們的開發(fā),但是對于一個強大的語言來說,它的生態(tài)圈一定也是非常繁榮的。

之前安裝Python解釋器時,默認情況下已經(jīng)勾選了安裝pip,大家可以在命令提示符或終端中通過pip --version來確定是否已經(jīng)擁有了pip。pip是Python的包管理工具,通過pip可以查找、安裝、卸載、更新Python的三方庫或工具,macOS和Linux系統(tǒng)應該使用pip3。例如要安裝替代json模塊的ujson,可以使用下面的命令。

pip install ujson

在默認情況下,pip會訪問https://pypi.org/simple/來獲得三方庫相關的數(shù)據(jù),但是國內訪問這個網(wǎng)站的速度并不是十分理想,因此國內用戶可以使用豆瓣網(wǎng)提供的鏡像來替代這個默認的下載源,操作如下所示。

可以通過pip search命令根據(jù)名字查找需要的三方庫,可以通過pip list命令來查看已經(jīng)安裝過的三方庫。如果想更新某個三方庫,可以使用pip install -Upip install --upgrade;如果要刪除某個三方庫,可以使用pip uninstall命令。

1、搜索ujson三方庫

pip search ujson
 
pip index versions ujson (Python 3.10+查看可用的版本)

2、查看已經(jīng)安裝的三方庫

pip list

3、更新ujson三方庫

pip install -U ujson

4、刪除ujson三方庫

pip uninstall -y ujson

提示:如果要更新pip自身,對于macOS系統(tǒng)來說,可以使用命令pip install -U pip。在Windows系統(tǒng)上,可以將命令替換為python -m pip install -U --user pip。

到此這篇關于Python進行JSON數(shù)據(jù)處理的全攻略的文章就介紹到這了,更多相關Python JSON數(shù)據(jù)處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • pycharm出現(xiàn)No?pyvenv.cfg?file錯誤的問題解決

    pycharm出現(xiàn)No?pyvenv.cfg?file錯誤的問題解決

    本文主要介紹了pycharm出現(xiàn)No?pyvenv.cfg?file錯誤的問題解決,主要是通過恢復歷史記錄中的未刪除狀態(tài)來解決,下面就來詳細的介紹一下,感興趣的可以了解一下
    2025-05-05
  • Python中文編碼那些事

    Python中文編碼那些事

    由于中文的特殊性,造成了在各大編程語言中都存在編碼轉換的問題,今天我們來探討下python中中文編碼如何處理呢
    2014-06-06
  • python基于OpenCV模塊實現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù)(流程分析)

    python基于OpenCV模塊實現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù)(流程分析)

    這篇文章主要介紹了python基于OpenCV模塊實現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù),這里今天主要是實踐一下視頻流數(shù)據(jù)的預處理工作,需要的朋友可以參考下
    2022-05-05
  • python如何尋找主串中所有指定子串下標

    python如何尋找主串中所有指定子串下標

    這篇文章主要介紹了python如何尋找主串中所有指定子串下標,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python中類裝飾器的實現(xiàn)示例

    python中類裝飾器的實現(xiàn)示例

    在 Python 中,類裝飾器是一種強大的工具,可以用來增強或修改類的行為,類裝飾器本質上是一個函數(shù),它接受一個類作為參數(shù),并返回一個新的類或對原類進行修改,下面就來詳細的介紹一下如何實現(xiàn)
    2026-02-02
  • python中你不知道的*號用法總結

    python中你不知道的*號用法總結

    Python?中的星號(*)是一個功能強大的符號,它遠不止簡單的乘法運算符,本文將深入探討*符號在Python中的各種用法,力求覆蓋你可能不知道的細節(jié)和技巧,需要的可以了解下
    2025-11-11
  • 從基礎到進階詳解Python中字符串分割的常見方法

    從基礎到進階詳解Python中字符串分割的常見方法

    字符串分割是編程中常見的操作,本文全面介紹了Python中的字符串分割方法,涵蓋基礎操作和高級技巧,希望可以幫助大家掌握Python字符串分割的技巧
    2026-04-04
  • python 通過logging寫入日志到文件和控制臺的實例

    python 通過logging寫入日志到文件和控制臺的實例

    下面小編就為大家分享一篇python 通過logging寫入日志到文件和控制臺的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python把1變成01的步驟總結

    python把1變成01的步驟總結

    在本文里我們給學習python的朋友們整理了關于python把1變成01的步驟總結內容,有需要的朋友們學習下。
    2019-02-02
  • Flask 數(shù)據(jù)庫集成的介紹

    Flask 數(shù)據(jù)庫集成的介紹

    這篇文章主要給大家分享了Flask 數(shù)據(jù)庫集成的介紹,數(shù)據(jù)庫是大多數(shù) Web 應用的基礎設施,只要想把數(shù)據(jù)存儲下來,就離不開數(shù)據(jù)庫,下面將一起學習一下如何給 Flask 應用添加數(shù)據(jù)庫支持。下面詳細內容,需要的朋友可以參考一下
    2021-11-11

最新評論

乃东县| 河池市| 韶关市| 敦煌市| 沙坪坝区| 瑞丽市| 长寿区| 原平市| 南郑县| 莲花县| 巨鹿县| 纳雍县| 漳浦县| 米脂县| 荔浦县| 宜兰市| 修水县| 定西市| 华池县| 台中市| 杭锦后旗| 都昌县| 金门县| 都江堰市| 新乐市| 隆林| 乐亭县| 成安县| 普洱| 奇台县| 大同市| 恭城| 林芝县| 莫力| 乌兰浩特市| 舞钢市| 尼木县| 滕州市| 湘乡市| 咸宁市| 安丘市|