UTILS.
เป็นส่วนตัวตั้งแต่เริ่ม
🦀

JSON เป็น Rust Serde Struct

สร้าง Rust struct พร้อม serde derive จาก JSON ตัวอย่าง พร้อมใช้ Serialize/Deserialize มี Option สำหรับฟิลด์ nullable และแอตทริบิวต์ rename

ไฟล์ของคุณอยู่ในอุปกรณ์นี้

ไฟล์ประมวลผลในเบราว์เซอร์และไม่ถูกอัปโหลด เว็บไซต์จะดาวน์โหลดโค้ดและทรัพยากรที่จำเป็นต่อเครื่องมือ ไม่ต้องมีบัญชีและไม่มีตัวติดตาม

ใช้ปุ่มดาวน์โหลดเพื่อบันทึกเครื่องมือนี้เป็นไฟล์ HTML ไฟล์เดียวสำหรับใช้ออฟไลน์

ความเป็นส่วนตัว →
ผลลัพธ์

เกี่ยวกับเครื่องมือนี้

เครื่องมือ JSON เป็น Rust Serde Struct แปลง JSON ตัวอย่างที่วางเข้ามาให้เป็น Rust struct ที่มี annotation สำหรับ serde คุณจึง deserialize payload เดียวกันได้โดยไม่ต้องเขียนทุกฟิลด์ด้วยมือ มันแยกวิเคราะห์ JSON อนุมานชนิด Rust แบบเรียกซ้ำ และสร้าง struct #[derive(Serialize, Deserialize, ...)] ต่อหนึ่ง object: string กลายเป็น String, จำนวนเต็มเป็น i64 (หรือ u64 เมื่อทุกตัวอย่างไม่เป็นค่าลบ), ตัวเลขอื่น ๆ เป็น f64, boolean เป็น bool, อาร์เรย์เป็น Vec<T>, และ object ซ้อนกลายเป็น struct PascalCase ของตัวเองที่กำหนดก่อนตัวแม่

งานทั้งหมดเกิดขึ้นภายในเบราว์เซอร์ของคุณด้วย JSON.parse และ JavaScript ธรรมดา — ไม่มีอะไรถูกอัปโหลด ฟิลด์ struct ถูกแปลงเป็น snake_case และเมื่อใดที่คีย์ JSON ต่างจากฟิลด์ snake_case เครื่องมือจะเพิ่ม #[serde(rename = "originalKey")] เพื่อให้ struct ยังจับคู่กับรูปแบบข้อมูลบนสายได้ คีย์ที่ไม่มีในบางตัวอย่าง sibling หรือพบเป็น null จะกลายเป็น Option<T> พร้อม #[serde(default)] เพื่อให้การ deserialize ยอมรับการขาดหายได้ อาร์เรย์ว่างจะกลับไปเป็น Vec<serde_json::Value>

ตัวสลับความกว้างจำนวนเต็มสลับระหว่างจำนวนเต็ม 64 บิต (i64/u64, ค่าเริ่มต้น) และ 32 บิต (i32/u32) โดยเลื่อนเป็น 64 บิตอัตโนมัติเมื่อค่าที่เก็บตัวอย่างเกินช่วง 32 บิต ตัวสลับ derive เลือกระหว่างชุดเต็ม (Serialize, Deserialize, Debug, Clone) และแบบขั้นต่ำ Serialize, Deserialize ไฟล์เริ่มต้นด้วย use serde::{Serialize, Deserialize}; คัดลอกหรือดาวน์โหลดไฟล์ .rs

คำถามที่พบบ่อย

ชนิด JSON ถูกจับคู่กับ Rust อย่างไร?
string เป็น String, จำนวนเต็มเป็น i64 (หรือ u64 เมื่อทุกตัวอย่างไม่เป็นค่าลบ), ตัวเลขที่ไม่ใช่จำนวนเต็มเป็น f64, boolean เป็น bool, อาร์เรย์เป็น Vec<T>, และ object เป็น struct ที่มีชื่อพร้อม serde derive ฟิลด์ที่เป็น null หรือขาดหายกลายเป็น Option<T> พร้อม #[serde(default)]
#[serde(rename)] ถูกเพิ่มเมื่อใด?
เมื่อใดที่คีย์ JSON ไม่เท่ากับชื่อฟิลด์ snake_case ของมัน — เช่น คีย์ userName จะให้ฟิลด์ user_name พร้อม #[serde(rename = "userName")] เพื่อให้ struct ยัง deserialize JSON เดิมได้อย่างถูกต้อง
ฉันเลือกความกว้างจำนวนเต็มได้ไหม?
ได้ ตัวสลับความกว้างสร้างจำนวนเต็ม 64 บิต (i64/u64) หรือ 32 บิต (i32/u32) เครื่องหมายตามข้อมูล: ตัวอย่างที่ไม่เป็นค่าลบทั้งหมดใช้ชนิดไม่มีเครื่องหมาย ค่าที่เกินช่วง 32 บิตจะถูกเลื่อนเป็น 64 บิตอัตโนมัติ
มี derive อะไรบ้าง?
ค่าเริ่มต้นคือ #[derive(Serialize, Deserialize, Debug, Clone)]; ตัวเลือกขั้นต่ำสร้างเพียง Serialize, Deserialize struct ลูกถูกประกาศก่อนตัวแม่ที่อ้างอิงถึง โมดูลจึงคอมไพล์ได้ทันที

เครื่องมือเพิ่มเติม