UTILS.
ทำงานในเบราว์เซอร์ 100%
🦀

JSON เป็น Rust Serde Struct

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

ผลลัพธ์

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

เครื่องมือ 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 ลูกถูกประกาศก่อนตัวแม่ที่อ้างอิงถึง โมดูลจึงคอมไพล์ได้ทันที

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