# 假設你有一個名為data.json的文件,包含JSON數據
filename = 'data.json'

# 加載JSON數據
with open(filename, 'r', encoding='utf-8') as f:
data = json.load(f)

# 格式化JSON數據并打印
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)

如果你的JSON數據是一個字符串,你可以這樣做,這也是“python打印json數據并格式化”的一個常見場景:

import json

# 假設你有一個JSON格式的字符串
json_string = '{"name": "John", "age": 30, "city": "New York"}'

# 將字符串轉換為Python字典
data = json.loads(json_string)

# 格式化JSON數據并打印
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)

在這兩個示例中,indent=4參數指定了輸出時使用4個空格進行縮進,ensure_ascii=False允許輸出非ASCII字符,而不是將它們轉換為\uXXXX形式的Unicode轉義序列。這些參數的設置是“python打印json數據并格式化”時常用的格式化選項。

這樣,你就可以在Python中打印并格式化JSON數據了。掌握“python打印json數據并格式化”的技能,可以讓你更有效地處理和展示JSON數據。


三、中間件:攔截請求和響應

要給 API 加點“全局功能”,比如日志、認證、限流,中間件是最好的工具。warp 的中間件通過 Filter 實現,比如記錄每次請求的日志:

use warp::Filter;

#[tokio::main]
asyncfnmain(){
letlog= warp::log("api::requests");

letroutes= warp::path("hello")
.map(||"Hello, Warp!")
.with(log);

   warp::serve(routes).run(([127,0,0,1],3030)).await;
}

每次請求都會輸出日志,比如:INFO  api::requests: "127.0.0.1:51234" GET /hello

? **warp::log**:內置的日志中間件,支持自定義日志目標。

溫馨提示:warp 的日志功能是基于 tokio 的 tracing 庫實現的,可以集成到更復雜的日志系統中。

四、錯誤處理:優雅地返回錯誤

沒人喜歡 500 錯誤頁面。warp 提供了靈活的錯誤處理方式,讓你的 API 更健壯。

use warp::Filter;

#[tokio::main]
asyncfnmain(){
letroute= warp::path!("divide"/i32/i32)
.and_then(|a, b|asyncmove{
if b ==0{
Err(warp::reject::custom(DivideByZero))
}else{
Ok(format!("Result: {}", a / b))
}
});

   warp::serve(route).run(([127,0,0,1],3030)).await;
}

#[derive(Debug)]
structDivideByZero;

implwarp::reject::RejectforDivideByZero {}

訪問 /divide/10/0 會返回空響應,因為我們沒定義錯誤的返回內容。

要自定義錯誤響應,可以加一個 recover 中間件:

let routes= route.recover(|err: warp::Rejection|asyncmove{
ifletSome(_)= err.find::<DivideByZero>(){
Ok(warp::reply::with_status("Cannot divide by zero", warp::http::StatusCode::BAD_REQUEST))
}else{
Err(err)
}
});

五、總結

warp 是一個功能強大卻簡單易用的 Web 框架,核心概念圍繞 Filter 展開,所有功能都可以通過組合實現。寫 API 的時候,你會發現它特別貼合 Rust 的表達方式,既安全又高效。

文章轉自微信公眾號@隔壁灬老吳

上一篇:

用aiohttp實現RESTful API,快速上手Python異步編程

下一篇:

輕量高效的API開發:如何使用Falcon快速構建RESTful接口
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費