JSON เป็น C++ คือกระบวนการแปลงข้อมูลในรูปแบบ JSON (อ็อบเจกต์หรืออาร์เรย์) เป็นนิยามประเภท struct/class C++ C++ เป็นภาษาโปรแกรมระบบประเภทเข้มงวดที่ใช้กันอย่างแพร่หลายในบริการแบ็กเอนด์ เอ็นจิ้นเกม เฟิร์มแวร์ระบบฝังตัว การค้าเชิงปริมาณ บริการประสิทธิภาพสูง และไคลเอ็นต์เดสก์ท็อป ในการพัฒนามักจำเป็นต้องแปลงตัวอย่าง JSON จากเอกสาร API หรือการตอบสนองจริงเป็นประเภท C++ การเขียนสตรัคเจอร์ด้วยตัวเองไม่เพียงแต่เป็นงานที่ซ้ำซาก แต่ยังมีแนวโน้มที่จะเขียนประเภทฟิลด์ผิด จุดประสงค์ของเครื่องมือนี้คือทำให้กระบวนการนี้เป็นอัตโนมัติ C++ แตกต่างจาก Java, Python, JavaScript ตรงที่ไม่มีการสนับสนุนเนทีฟสำหรับโครงสร้างไดนามิกเช่น JSON ดังนั้น 'JSON เป็น C++' จึงถูกมองว่าเป็นงานที่ 'ซ้ำซากแต่จำเป็นต้องทำ' ในวงการวิศวกรรมมานานแล้ว
เครื่องมือนี้ทำงานในเบราว์เซอร์ในเครื่องตาม quicktype-core โดยใช้เรนเดอร์ CPP และตัวเลือกการเรนเดอร์ just-types เพื่อสร้างโค้ดสตรัคเจอร์สำหรับ C++ ที่อ้างอิง std::string/std::vector<T>/std::optional<T> โค้ดที่สร้างขึ้นเป็นโค้ด C++ มาตรฐานแบบ header-only ที่ไม่ขึ้นอยู่กับไลบรารีแยกวิเคราะห์ JSON ของบุคคลที่สามใดๆ สามารถ #include เข้ากับโปรเจกต์ C++17/C++20 ใดๆ ได้โดยตรง เมื่อใช้ร่วมกับตัวแยกวิเคราะห์ nlohmann::json หรือ rapidjson สามารถดีซีเรียลไลซ์การตอบสนอง API ได้อย่างรวดเร็ว กระบวนการเรนเดอร์ทั้งหมดทำแบบอะซิงโครนัสในเบราว์เซอร์ผ่าน Web Worker เธรดหลักยังคงทำงานได้อย่างลื่นไหลและตอบสนองได้ดี
การอนุมานประเภทเป็นหัวใจของ JSON เป็น C++ เครื่องมือจะแมปประเภทพื้นฐานของ JSON เป็นประเภทมาตรฐานของ C++: สตริงเป็น std::string จำนวนเต็มเป็น int64_t (เข้ากันได้กับ long long หลีกเลี่ยงความแตกต่างขนาด long ข้ามแพลตฟอร์ม) จำนวนทศนิยมเป็น double บูลีนเป็น bool อาร์เรย์เป็น std::vector<T> อ็อบเจกต์ซ้อนในเป็นสตรัคเจอร์/คลาสอิสระ ค่า null เป็น std::optional<T> สำหรับอ็อบเจกต์ซ้อนใน เครื่องมือจะสร้างคลาสใหม่สำหรับแต่ละระดับโดยอัตโนมัติและตั้งชื่อตาม PascalCase ตัวอย่างเช่น ฟิลด์ address จะสร้างสตรัคเจอร์ Address อ็อบเจกต์ในอาร์เรย์ items จะสร้างสตรัคเจอร์ Item ระดับ JSON ที่ซ้อนกันเดียวกันจะถูกสร้างเพียงครั้งเดียวเท่านั้น ไม่มีการนิยามซ้ำ
แตกต่างจากเครื่องมือออนไลน์บางอย่างที่ต้องอัปโหลด JSON ไปยังเซิร์ฟเวอร์เพื่อประมวลผล การคำนวณทั้งหมดของเครื่องมือนี้ทำในเบราว์เซอร์ quicktype-core ถูกโหลดและดำเนินการผ่าน Web Worker การแยกวิเคราะห์ JSON การอนุมานประเภท การสร้างโค้ด C++ และการดาวน์โหลดไฟล์ทั้งหมดทำในเครื่อง ไม่มีการส่งข้อมูลไปยังเซิร์ฟเวอร์ใดๆ สิ่งนี้มีความสำคัญอย่างยิ่งสำหรับ JSON ที่มีคีย์ API ฟิลด์ความเป็นส่วนตัวของผู้ใช้ หรือโครงสร้างธุรกิจที่ยังไม่เปิดตัว ข้อมูลจะถูกลบออกจากหน่วยความจำหลังจากปิดหน้า ไม่ว่าสภาพแวดล้อมเครือข่ายของบริษัท ข้อกำหนดการตรวจสอบภายใน หรือสถานการณ์การพัฒนาออฟไลน์จะเป็นอย่างไร เครื่องมือนี้สามารถให้ความน่าเชื่อถือเทียบเท่ากับเครื่องมือบรรทัดคำสั่ง quicktype
โค้ดที่สร้างขึ้นมักต้องใช้ร่วมกับตัวแยกวิเคราะห์ JSON มีสองตัวเลือกหลัก: ① nlohmann::json (แนะนำ รวมเฮดเดอร์เดียว อินเทอร์เฟซซีเรียลไลซ์เทมเพลตใช้งานง่าย การเขียนคล้าย nlohmann::json j = nlohmann::json::parse(str); User u = j.get<User>();); ② rapidjson (การแยกวิเคราะห์สไตล์ SAX/DOM ประสิทธิภาพสูง เหมาะสำหรับสถานการณ์สุดขั้วเช่น การเงิน เกม ต้องการการแยกฟิลด์ด้วยตัวเองโดยใช้ GetObject) สำหรับระบบฝังตัวสามารถใช้ ArduinoJson (ทรัพยากรจำกัด) หรือ cJSON (อินเทอร์เฟซสไตล์ C) ได้ด้วย โค้ดของเครื่องมือนี้เข้ากันได้กับไลบรารี JSON C++ หลักทั้งหมด ไม่ได้ผูกมัดกับระบบนิเวศใดระบบนิเวศหนึ่งโดยเฉพาะ
ควรทราบว่าโค้ดที่สร้างโดยอัตโนมัติเป็นจุดเริ่มต้น ไม่ใช่จุดจบ เครื่องมืออนุมานประเภทตามตัวอย่าง JSON ไม่สามารถตัดสินประเภทที่ถูกต้องทางธุรกิจได้ (เช่น ประเภทเชิงความหมายเช่น URL อีเมล ID จะถูกอนุมานเป็น std::string อย่างสม่ำเสมอ) สำหรับฟิลด์ JSON snake_case ฟิลด์สตรัคเจอร์ C++ จะถูกสร้างโดยรักษารูปแบบเดิม คุณอาจต้องเพิ่ม NLOHMANN_DEFINE_TYPE_INTRUSIVE หรือ NLOHMANN_JSON_FROM/NLOHMANN_JSON_TO ด้วยตัวเองเพื่อประกาศความสัมพันธ์การแมป ขอแนะนำให้ถือผลลัพธ์ที่สร้างขึ้นเป็นร่างแรก จากนั้นปรับแต่งชื่อฟิลด์ ประเภท และคำอธิบายประกอบซีเรียลไลซ์ตามข้อกำหนดของโปรเจกต์ เวิร์กโฟลว์ 'AI เขียนร่างแรก + วิศวกรตรวจสอบ' นี้ยังเป็นจังหวะการทำงานจริงของทีม C++ จำนวนมาก
ในสถานการณ์การทำงานร่วมกันข้ามทีม JSON เป็น C++ ยังเป็นสะพานเชื่อมในการรวมโมเดลข้อมูล ฟรอนต์เอนด์ใช้ JSON เป็น TypeScript แบ็กเอนด์ใช้ JSON เป็น Java/Go/Rust ระบบฝังตัวและบริการประสิทธิภาพใช้ JSON เป็น C++ ทั้งสี่ฝ่ายสร้างนิยามประเภทของตนเองจากตัวอย่าง JSON เดียวกัน ซึ่งรับประกันความสอดคล้องของฟิลด์สูงสุด เครื่องมือนี้คือ 'ฝั่ง C++' ในเวิร์กโฟลว์นี้ สามารถใช้พร้อมกันกับเครื่องมืออื่นๆ บนเว็บไซต์สำหรับแปลง JSON เป็น TypeScript/Java/Rust/Go/Python
สรุปในประโยคเดียว: หากโค้ดของคุณทำงานในโปรเจกต์ C++ ที่ไวต่อประสิทธิภาพ ประเภทเข้มงวด และมีระบบนิเวศที่อุดมสมบูรณ์ และคุณต้องการเชื่อมต่อข้อมูลไดนามิกเช่น JSON เข้ากับโลกประเภทเข้มงวดอย่างรวดเร็ว เครื่องมือนี้คือจุดเริ่มต้นโดยตรงสำหรับการคอมไพล์ตัวอย่าง JSON เป็นสตรัคเจอร์ C++