JSON to Rust Struct
Konvertiere JSON-Objekte zu Rust-Struct-Definitionen mit serde-Derive-Makros.
Über dieses Tool
JSON to Rust Struct ist ein Code-Generierungstool, das JSON-Daten automatisch in stark typisierte Rust-Struct-Definitionen umwandelt. Da Rust explizite Typdeklarationen erfordert, kann das manuelle Schreiben von Structs aus JSON mühsam und fehleranfällig sein, besonders bei großen oder tief verschachtelten Objekten. Dieses Tool beseitigt diese wiederholte Arbeit, indem es die JSON-Struktur analysiert und Struct-Code mit serde-Derivemakros für nahtlose Serialisierung und Deserialisierung generiert.
Fügen Sie einfach Ihre JSON-Daten in das Eingabefeld ein, und das Tool generiert sofort Rust-Struct-Code, der in Ihrem Projekt einsatzbereit ist. Die generierten Structs enthalten Standard-Serde-Annotationen und sind mit beliebten Rust-Bibliotheken wie serde_json kompatibel. Dies ist besonders nützlich bei der Arbeit mit externen APIs, Konfigurationsdateien oder JSON-basierten Daten, die in Rust geparst werden müssen.
Das Tool verarbeitet optionale Felder und verschachtelte Objekte intelligent und reduziert die manuelle Anpassung, die vor der Kompilierung erforderlich ist. Egal ob Sie einen Webdienst, ein CLI-Tool entwickeln oder REST-APIs integrieren – dieser Konverter spart Zeit und hilft, die Typsicherheit in Ihrer gesamten Rust-Codebasis zu gewährleisten.
Häufig gestellte Fragen
Code-Implementierung
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.