การทำงานกับ JSON
serde_json
การทำงานกับ JSON เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn Rust Coding และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
crate serde_json
serde_json เป็น implementation ของรูปแบบ JSON สำหรับ serde โดยมีฟังก์ชันสำหรับแปลงระหว่างค่า Rust กับข้อความ JSON
to_string/from_strสำหรับข้อความValueสำหรับ JSON แบบไดนามิก
แปลง struct เป็นข้อความ JSON
serde_json::to_string ทำซีเรียลไลซ์ค่าใด ๆ ที่เป็น Serialize ให้เป็นข้อความ JSON
use serde::Serialize;
#[derive(Serialize)]
struct User { id: u32, name: String }
fn main() {
let u = User { id: 1, name: "Alice".to_string() };
let json = serde_json::to_string(&u).unwrap();
println!("{}", json);
}แปลงข้อความ JSON เป็น struct
serde_json::from_str แยกวิเคราะห์ JSON ให้เป็นค่าที่มีชนิดข้อมูลชัดเจน และคืนค่าเป็น Result เพื่อให้คุณจัดการกับอินพุตที่ไม่ถูกต้องได้
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct User { id: u32, name: String }
fn main() {
let data = r#"{"id":1,"name":"Alice"}"#;
let u: User = serde_json::from_str(data).unwrap();
println!("{:?}", u);
}การแสดงผลแบบอ่านง่าย
ใช้ to_string_pretty เพื่อสร้าง JSON ที่มีการเยื้องและอ่านได้ง่าย เหมาะสำหรับไฟล์การตั้งค่าและการแก้ไขข้อผิดพลาด
use serde::Serialize;
#[derive(Serialize)]
struct Cfg { debug: bool, level: u8 }
fn main() {
let c = Cfg { debug: true, level: 3 };
println!("{}", serde_json::to_string_pretty(&c).unwrap());
}มาโคร json!
สร้าง JSON แบบเขียนตรงจุดด้วยมาโคร json! ซึ่งสร้าง Value ได้โดยไม่ต้องกำหนด struct
use serde_json::json;
fn main() {
let v = json!({
"name": "Alice",
"roles": ["admin", "user"]
});
println!("{}", v);
}ชนิดข้อมูล Value
serde_json::Value เป็น enum ที่แทนโหนด JSON ได้ทุกชนิด ได้แก่ null, บูลีน, ตัวเลข, ข้อความ, อาร์เรย์ หรือออบเจ็กต์ ใช้เมื่อยังไม่ทราบโครงสร้าง
use serde_json::Value;
fn main() {
let data = r#"{"name":"Bob","age":30}"#;
let v: Value = serde_json::from_str(data).unwrap();
println!("{}", v["name"]);
println!("{}", v["age"]);
}อ่านค่าจาก Value อย่างปลอดภัย
การเข้าถึงด้วยดัชนีจะคืนค่าเป็น Value ให้ใช้เมธอดเข้าถึง เช่น as_str หรือ as_i64 ซึ่งคืนค่าเป็น Option เพื่ออ่านข้อมูลตามชนิดอย่างปลอดภัย
use serde_json::Value;
fn name_of(v: &Value) -> Option<&str> {
v.get("name")?.as_str()
}จำลองการเข้าถึง JSON ด้วย Rust ปกติ
การอ่านค่าด้วยคีย์พร้อมค่าทดแทนเมื่อไม่มีคีย์นั้น สอดคล้องกับวิธีสอบถามออบเจ็กต์ Value ตัวอย่างนี้ใช้ HashMap
use std::collections::HashMap;
fn main() {
let mut obj: HashMap<&str, &str> = HashMap::new();
obj.insert("name", "Alice");
let name = obj.get("name").copied().unwrap_or("unknown");
let city = obj.get("city").copied().unwrap_or("unknown");
println!("name={} city={}", name, city);
}ไบต์และตัวเขียนข้อมูล
เพื่อประสิทธิภาพ to_vec จะทำซีเรียลไลซ์เป็นไบต์ ส่วน to_writer จะส่งข้อมูลโดยตรงไปยัง io::Write ใด ๆ เช่น ไฟล์หรือซ็อกเก็ต
use serde::Serialize;
#[derive(Serialize)]
struct Msg { text: String }
fn to_bytes(m: &Msg) -> Vec<u8> {
serde_json::to_vec(m).unwrap()
}จัดการข้อผิดพลาดจากการแยกวิเคราะห์
from_str คืนค่าเป็น Result ให้ตรวจสอบข้อผิดพลาดเพื่อแสดงข้อความที่เป็นประโยชน์แก่ผู้ใช้แทนการทำให้โปรแกรมหยุดทำงาน
use serde::Deserialize;
#[derive(Deserialize)]
struct User { id: u32 }
fn parse(s: &str) -> String {
match serde_json::from_str::<User>(s) {
Ok(u) => format!("id {}", u.id),
Err(e) => format!("invalid JSON: {}", e),
}
}แปลงระหว่าง Value กับ struct
serde_json::from_value และ to_value ใช้แปลงระหว่าง struct ที่มีชนิดข้อมูลชัดเจนกับ Value แบบไดนามิกเมื่อคุณต้องการใช้ทั้งสองแบบ
use serde::Deserialize;
use serde_json::json;
#[derive(Deserialize)]
struct User { name: String }
fn main() {
let v = json!({"name": "Eve"});
let u: User = serde_json::from_value(v).unwrap();
println!("{}", u.name);
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับการทำงานกับ JSON
สรุป
คุณได้เรียนรู้การจัดการ JSON ด้วย serde_json:
to_string/from_strใช้แปลงระหว่าง struct กับข้อความ JSONto_string_prettyจัดรูปแบบให้อ่านง่าย- มาโคร
json!และValueใช้จัดการ JSON แบบไดนามิก - ใช้เมธอดเข้าถึงและ
Resultเพื่ออ่านและแยกวิเคราะห์อย่างปลอดภัย
ถัดไป: ปรับแต่งการทำซีเรียลไลซ์ด้วยแอตทริบิวต์ของฟิลด์
คำถามที่พบบ่อย
บทเรียน “การทำงานกับ JSON” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การทำงานกับ JSON” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การทำงานกับ JSON”
serde_json คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn Rust Coding หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn Rust Coding บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การทำงานกับ JSON” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม
ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ