JSON → Rust Struct 변환기

JSON 샘플에서 serde의 Serialize와 Deserialize를 derive하는 Rust struct를 생성합니다.

JSON에서 serde struct 생성

Rust에서 JSON을 읽는 일반적인 방법은 serde와 serde_json으로 struct에 역직렬화하는 것입니다. 이 변환기는 샘플을 바탕으로 그 struct를 작성해 줍니다. 각 객체는 #[derive(Serialize, Deserialize)]가 붙은 struct가 되고, 중첩 객체는 별도의 struct가 되며, 배열은 Vec<T>, 정수는 i64, 소수는 f64, 문자열은 String이 됩니다. 필드 이름은 snake_case로 유지되며, JSON 키가 유효한 snake_case 식별자가 아니면 #[serde(rename = "...")] 어트리뷰트가 추가됩니다.

사용 방법

  1. 이벤트 페이로드나 설정 파일 같은 JSON 샘플을 붙여넣습니다.
  2. 루트 struct 이름을 입력합니다. 예: Event.
  3. Cargo.toml에 serde(derive feature 포함)와 serde_json을 추가하고, struct를 모듈에 붙여넣은 뒤 serde_json::from_str::<Event>(&text)로 파싱합니다.

자주 묻는 질문

필드가 private인 이유는 무엇인가요?
생성기는 필드에 pub을 붙이지 않습니다. 모듈 안에서 serde를 사용하기에는 이것으로 충분합니다. 다른 모듈에서 읽어야 하는 필드에는 pub을 추가하세요.
선택적 필드는 어떻게 표현되나요?
샘플 항목 중 일부에서 필드가 null이거나 누락되어 있으면 Option<T>로 생성되므로 serde가 두 경우를 모두 받아들입니다. 항상 존재하는 필드는 일반 타입으로 생성되며, 이런 필드가 없으면 역직렬화 에러가 발생합니다.
어떤 crate가 필요한가요?
features = ["derive"]를 지정한 serde와 serde_json을 추가하세요. 출력 상단의 주석에는 예전 방식인 extern crate 구문도 나와 있지만, 현재 Rust 에디션에서는 필요하지 않습니다.

예시: JSON to Rust

입력 JSON

{
  "event_type": "page_view",
  "timestamp": 1735689600,
  "user_id": "u_123",
  "properties": { "path": "/pricing", "referrer": "google" }
}

생성된 Rust 코드 (Event)

// Example code that deserializes and serializes the model.
// extern crate serde;
// #[macro_use]
// extern crate serde_derive;
// extern crate serde_json;
//
// use generated_module::Event;
//
// fn main() {
//     let json = r#"{"answer": 42}"#;
//     let model: Event = serde_json::from_str(&json).unwrap();
// }

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
pub struct Event {
    event_type: String,

    timestamp: i64,

    user_id: String,

    properties: Properties,
}

#[derive(Serialize, Deserialize)]
pub struct Properties {
    path: String,

    referrer: String,
}

다른 언어로 JSON 변환