在Rust中使用serde_json实现大JSON的部分反序列化可行吗?
Rust中使用serde_json仅反序列化JSON部分属性的实现方法
完全可以只反序列化JSON中的指定属性,忽略其余字段,serde_json默认支持该特性,具体实现步骤如下:
1. 配置依赖
在Cargo.toml中添加serde和serde_json依赖,确保启用derive特性:
[dependencies] serde = { version = "1.0", features = ["derive"] } serde_json = "1.0"
2. 定义对应结构体
只需要在结构体中声明你需要的字段,嵌套结构(比如示例中的buy_links数组)也要定义对应的子结构体:
use serde::Deserialize; // 对应buy_links中的单个链接对象 #[derive(Debug, Deserialize)] struct BuyLink { name: String, url: String, } // 主结构体仅保留需要的两个字段 #[derive(Debug, Deserialize)] struct BookResponse { amazon_product_url: String, buy_links: Vec<BuyLink>, }
3. 执行反序列化操作
直接使用serde_json::from_str(或从字节流反序列化的from_slice)即可,未定义的字段会自动被忽略:
use serde_json::Result; fn main() -> Result<()> { // 替换为实际接口返回的JSON字符串/字节流 let json_content = r#"{ "age_group": "", "amazon_product_url": "https://www.amazon.com/dp/0063221489?tag=NYTBSREV-20", "article_chapter_link": "", "asterisk": 0, "author": "Jared Kushner", "book_image": "https://storage.googleapis.com/du-prd/books/images/9780063221482.jpg", "book_image_height": 500, "book_image_width": 331, "book_review_link": "", "book_uri": "nyt://book/e5ec4777-5f2f-5622-9288-9b1d96e8fe1d", "buy_links": [ {"name": "Amazon", "url": "https://www.amazon.com/dp/0063221489?tag=NYTBSREV-20"}, {"name": "Apple Books", "url": "https://goto.applebooks.apple/9780063221482?at=10lIEQ"}, {"name": "Barnes and Noble", "url": "https://www.anrdoezrs.net/click-7990613-11819508?url=https%3A%2F%2Fwww.barnesandnoble.com%2Fw%2F%3Fean%3D9780063221482"} ] }"#; let parsed_data: BookResponse = serde_json::from_str(json_content)?; // 打印获取到的目标字段 println!("亚马逊商品链接: {}", parsed_data.amazon_product_url); println!("购买链接列表: {:?}", parsed_data.buy_links); Ok(()) }
额外说明
- 如果JSON字段名与Rust结构体字段名不一致,可通过
#[serde(rename = "json字段名")]注解映射,例如:#[derive(Debug, Deserialize)] struct BookResponse { #[serde(rename = "amazon_product_url")] amazon_url: String, buy_links: Vec<BuyLink>, } - 若需严格禁止未知字段(默认是允许并忽略),可添加
#[serde(deny_unknown_fields)]注解到结构体上,此时若JSON存在未定义字段会直接返回反序列化错误。
内容的提问来源于stack exchange,提问作者Habibullah Rezaie
相关产品推荐
相关产品推荐

