JSON to Rust Struct
JSON nesnelerini serde derive makrolarına sahip Rust yapı tanımlarına dönüştürün.
Bu araç hakkında
JSON to Rust Struct, JSON verilerini güçlü bir şekilde yazılı Rust struct tanımlarına otomatik olarak dönüştüren bir kod oluşturma aracıdır. Rust açık tür bildirimlerini gerektirdiğinden, JSON'dan struct'ları elle yazmak, özellikle büyük veya derin iç içe nesneler için yorucu ve hatalara açık olabilir. Bu araç, JSON yapısını analiz ederek ve serde türetme makroları içeren struct kodu oluşturarak bu tekrarlı işi ortadan kaldırır.
JSON verilerinizi giriş alanına yapıştırmanız yeterlidir ve araç anında projenizde kullanılmaya hazır Rust struct kodu oluşturur. Oluşturulan struct'lar standart serde ek açıklamalarını içerir ve serde_json gibi popüler Rust kütüphaneleriyle uyumludur. Bu, harici API'ler, yapılandırma dosyaları veya Rust'ta ayrıştırılması gereken JSON tabanlı verilerle çalışırken özellikle yararlıdır.
Araç, isteğe bağlı alanları ve iç içe nesneleri akıllıca ele alarak, kod derlenmeden önce gerekli el ile yapılan ayarlamaları azaltır. Web hizmeti, CLI aracı oluşturuyor veya REST API'lerini entegre ediyor olsanız da, bu dönüştürücü zaman kazandırır ve tüm Rust kod tabanınızda tür güvenliğini korumanıza yardımcı olur.
Sıkça Sorulan Sorular
Kod Uygulaması
import json
from typing import Any
def to_pascal_case(s: str) -> str:
return ''.join(word.capitalize() for word in s.replace('-', '_').split('_'))
def to_snake_case(s: str) -> str:
import re
s = re.sub(r'([A-Z]+)([A-Z][a-z])', r'\1_\2', s)
s = re.sub(r'([a-z\d])([A-Z])', r'\1_\2', s)
return s.lower().replace('-', '_')
def infer_type(value: Any, key: str, structs: dict) -> str:
if value is None:
return 'Option<serde_json::Value>'
elif isinstance(value, bool):
return 'bool'
elif isinstance(value, int):
return 'i64'
elif isinstance(value, float):
return 'f64'
elif isinstance(value, str):
return 'String'
elif isinstance(value, list):
if not value:
return 'Vec<serde_json::Value>'
return f'Vec<{infer_type(value[0], key, structs)}>'
elif isinstance(value, dict):
struct_name = to_pascal_case(key)
collect_structs(value, struct_name, structs)
return struct_name
return 'serde_json::Value'
def collect_structs(obj: dict, name: str, structs: dict):
fields = []
for k, v in obj.items():
snake = to_snake_case(k)
rust_type = infer_type(v, k, structs)
if snake != k:
fields.append(f' #[serde(rename = "{k}")]')
fields.append(f' pub {snake}: {rust_type},')
structs[name] = fields
def json_to_rust(json_str: str, root_name: str = 'Root') -> str:
data = json.loads(json_str)
structs = {}
collect_structs(data, root_name, structs)
lines = []
for name, fields in structs.items():
lines.append('#[derive(Debug, Serialize, Deserialize)]')
lines.append(f'pub struct {name} {{')
lines.extend(fields)
lines.append('}')
lines.append('')
return '\n'.join(lines)
json_input = '{"name": "Alice", "age": 30, "active": true}'
print(json_to_rust(json_input))Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.