JSON'dan C++'ya, JSON biçimindeki verileri (nesneler veya diziler) C++ struct/class tür tanımlarına dönüştürme işlemidir. C++, arka uç hizmetleri, oyun motorları, gömülü firmware, nicel ticaret, yüksek performanslı hizmetler ve masaüstü istemciler gibi senaryolarda yaygın olarak kullanılan güçlü türlü bir sistem programlama dilidir. Geliştirme sırasında sık sık API belgelerindeki veya gerçek yanıtlardaki örnek JSON'u C++ türlerine dönüştürmek gerekir, struct'ları elle yazmak yalnızca fazla tekrarlayan iş yapmakla kalmaz, aynı zamanda alan türlerini yanlış yazma olasılığı da yüksektir, bu aracın amacı bu süreci otomatikleştirmektir. C++, Java, Python, JavaScript'ten farklı olarak JSON gibi dinamik yapılar için yerel desteğe sahip değildir, bu nedenle 'JSON'dan C++'ya' mühendislik dünyasında uzun zamandır 'tekrarlayan ama atlanamayan' bir iş olarak görülmüştür.
Bu araç, tarayıcıda yerel olarak quicktype-core tabanında çalışır, C++ için std::string/std::vector<T>/std::optional<T> tabanlı struct kodu üretmek üzere CPP işleyici ve just-types işleme seçeneklerini kullanır. Üretilen kod, hiçbir üçüncü taraf JSON ayrıştırma kütüphanesine bağımlı olmayan standart header-only C++ kodudur, doğrudan herhangi bir C++17/C++20 projesine #include eklenebilir. nlohmann::json veya rapidjson ayrıştırıcıları ile birlikte kullanıldığında API yanıtlarının deserializasyonu hızla tamamlanabilir. Tüm işleme süreci tarayıcıda Web Worker aracılığıyla asenkron olarak gerçekleştirilir, ana iş parçacığı akıcı ve yanıt verici kalır.
Tür çıkarımı, JSON'dan C++'ya'nın çekirdeğidir. Araç, JSON'un temel türlerini C++ standart türlerine eşler: dizeleri std::string ile, tamsayıları int64_t ile (long long ile uyumlu, platformlar arası long boyut farklılıklarını önler), kayan noktalı sayıları double ile, boolean değerleri bool ile, dizileri std::vector<T> ile, iç içe nesneleri bağımsız struct/class ile, null değerleri std::optional<T> ile eşler. İç içe nesneler için araç, her seviye için otomatik olarak yeni bir sınıf oluşturur ve PascalCase ile adlandırır, örneğin address alanı Address struct'ı üretir, items dizisindeki nesneler Item struct'ı üretir. Aynı JSON iç içe seviyesi yalnızca bir kez üretilir, tekrarlayan tanımlar yapılmaz.
JSON'u işlemek için sunucuya yüklemeyi gerektiren bazı çevrimiçi araçların aksine, bu aracın tüm hesaplamaları tarayıcıda yapılır. quicktype-core, Web Worker aracılığıyla yüklenir ve yürütülür, JSON ayrıştırma, tür çıkarımı, C++ kod üretme ve dosya indirme işlemlerinin tümü yerel olarak yapılır, hiçbir veri sunucuya gönderilmez. Bu, API anahtarları, kullanıcı gizlilik alanları veya yayınlanmamış iş yapıları içeren JSON için özellikle önemlidir, sayfa kapatıldıktan sonra veriler bellekten temizlenir. Şirket ağ ortamı, iç denetim gereksinimleri veya çevrimdışı geliştirme senaryoları ne olursa olsun, bu araç quicktype komut satırı aracıyla aynı güvenilirliği sağlayabilir.
Üretilen kod genellikle bir JSON ayrıştırıcı ile birlikte kullanılmalıdır. İki ana seçenek vardır: ① nlohmann::json (önerilen, tek header ekleme, şablon serileştirme arayüzü kullanıcı dostu, nlohmann::json j = nlohmann::json::parse(str); User u = j.get<User>(); benzeri yazım); ② rapidjson (finans, oyun gibi uç senaryolar için uygun, yüksek performanslı SAX/DOM tarzı ayrıştırma, GetObject ile alanları manuel olarak çıkarmayı gerektirir). Gömülü sistemler için ArduinoJson (sınırlı kaynaklar) veya cJSON (C tarzı arayüz) de kullanılabilir. Bu aracın kodu tüm ana akım C++ JSON kütüphaneleriyle uyumludur, belirli bir ekosisteme zorla bağlı değildir.
Unutulmamalıdır ki otomatik olarak üretilen kod bir başlangıç noktasıdır, bitiş noktası değildir. Araç, türleri örnek JSON'a göre çıkarır, iş dünyasındaki kesin türleri yargılayamaz (örn. URL, E-posta, kimlik gibi anlamsal türlerin tümü tek tip olarak std::string olarak çıkarılır). snake_case JSON alanları için C++ struct alanları orijinal halleriyle üretilir, eşleşme ilişkilerini bildirmek için manuel olarak NLOHMANN_DEFINE_TYPE_INTRUSIVE veya NLOHMANN_JSON_FROM/NLOHMANN_JSON_TO eklemeniz gerekebilir. Üretilen sonucu bir taslak olarak ele almanız ve proje özelliklerine göre alan adlarını, türleri ve serileştirme notlarını ayarlamanız önerilir. Bu 'Yapay zeka taslak yazar + mühendis inceler' iş akışı aynı zamanda çok sayıda C++ ekibinin gerçek temposudur.
Ekipler arası işbirliği senaryolarında JSON'dan C++'ya, veri modellerini birleştirmenin de köprüsüdür. Ön uç JSON'dan TypeScript'e, arka uç JSON'dan Java/Go/Rust'a, gömülü ve performans hizmetleri JSON'dan C++'ya kullanır, dört taraf aynı örnek JSON'dan kendi tür tanımlarını üretir, bu da alan tutarlılığını en üst düzeye çıkarır. Bu araç bu iş akışındaki 'C++ tarafıdır', sitedeki diğer JSON'dan TypeScript/Java/Rust/Go/Python araçlarıyla aynı anda kullanılabilir.
Tek cümleyle özetlemek gerekirse: Kodunuz performansa duyarlı, güçlü türlü, zengin ekosisteme sahip C++ projelerinde çalışıyorsa ve JSON gibi dinamik verileri hızla güçlü türlü dünyaya bağlamanız gerekiyorsa, bu araç örnek JSON'u C++ struct'larına derlemek için doğrudan bir giriş noktasıdır.