Skip to content

JSON to Rust 구조체 변환기

온라인 JSON to Rust 구조체 변환기. 붙여넣으면 즉시 serde 구조체를 생성합니다. 100% 브라우저 처리, 데이터 전송 없음. i64/u64/f64 타입, null은 Option. 무료.

트래킹 없음 브라우저 실행 무료
옵션
0
Rust 출력
0
실제 API 페이로드에 대해 serde 시맨틱과 rustfmt 포맷에 맞춰 검증 완료. — Go Tools Team · Jul 2, 2026

JSON to Rust 변환이란 무엇인가요?

JSON to Rust 변환은 JSON 샘플을 serde의 #[derive(Serialize, Deserialize)] 매크로가 붙은, 바로 컴파일할 수 있는 Rust 구조체로 바꿔 줍니다. 그래서 API 응답이나 설정 파일을 위해 역직렬화 보일러플레이트를 손으로 쓸 필요가 없습니다. 이 빠른 Rust 구조체 생성기는 올바른 숫자 타입을 추론하고, 없는 필드를 Option으로 표시하며, snake_case가 아닌 키에는 #[serde(rename)]을 추가합니다 — 모두 100% 브라우저에서 이뤄집니다.

예시

API 응답

{"id":101,"name":"Ada Lovelace","email":"ada@example.com","active":true,"roles":["admin","user"]}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub id: i64,
    pub name: String,
    pub email: String,
    pub active: bool,
    pub roles: Vec<String>,
}

일반적인 REST 페이로드가 클라이언트에 바로 넣을 수 있는 serde 구조체가 됩니다. 숫자는 i64로 추론되고 배열은 Vec<String>이 됩니다.

중첩 객체

{"repo":"serde","owner":{"login":"dtolnay","id":100}}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub repo: String,
    pub owner: Owner,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Owner {
    pub login: String,
    pub id: i64,
}

중첩 객체는 필드에서 참조되는 별도의 명명된 구조체(Owner)가 되며, 동일한 형태는 중복 제거됩니다.

객체 배열(선택적 필드)

{"users":[{"id":1,"nick":"x"},{"id":2}]}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub users: Vec<User>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
    pub id: i64,
    pub nick: Option<String>,
}

객체 배열은 하나의 요소 구조체로 병합됩니다. 일부 항목에 없는 키는 Option<String>이 되며 #[serde(default)]는 필요 없습니다.

camelCase 키

{"login":"octocat","publicRepos":15,"followerCount":9001,"createdAt":"2011-01-25"}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub login: String,
    #[serde(rename = "publicRepos")]
    pub public_repos: i64,
    #[serde(rename = "followerCount")]
    pub follower_count: i64,
    #[serde(rename = "createdAt")]
    pub created_at: String,
}

필드는 snake_case가 되고 #[serde(rename)]이 원래 JSON 키로 다시 매핑합니다. login처럼 이미 snake 형태인 키에는 rename이 붙지 않습니다.

JSON을 Rust로 변환하는 방법

  1. 1

    JSON 붙여넣기

    JSON 객체, 배열 또는 API 응답을 입력 상자에 넣으세요. 변환이 즉시 시작됩니다.

  2. 2

    출력 조정

    루트 구조체의 이름을 바꾸고 serde derive, Debug와 Clone, pub 가시성을 토글하여 crate 스타일에 맞추세요.

  3. 3

    복사 또는 다운로드

    생성된 Rust를 한 번의 클릭으로 가져와 프로젝트에 바로 붙여넣으세요.

Common Use Cases

타입이 지정된 API 클라이언트
REST나 GraphQL 응답 샘플을 reqwest 같은 클라이언트를 위한 serde 구조체로 바꿉니다. 역직렬화 보일러플레이트를 손으로 쓸 필요가 없습니다.
설정과 픽스처 파싱
serde_json으로 역직렬화해야 하는 JSON 설정 파일, 테스트 픽스처, 웹훅 페이로드의 구조체를 생성합니다.
빠른 프로토타이핑
낯선 페이로드를 붙여넣으면 그 형태가 Rust 타입으로 즉시 표시됩니다 — 연결하기 전에 새로운 API를 빠르게 탐색하는 방법입니다.

변환이 작동하는 방식

구조적 추론
각 객체는 명명된 구조체가 되며, 동일한 형태는 중복 제거되어 복사본이 아닌 하나의 구조체를 얻습니다. 객체 배열은 키 단위로 병합되고, 일부 항목에 없는 키는 Option<T>가 됩니다.
올바른 숫자 타입 지정
정수는 i64로 매핑되고, i64::MAX를 넘으면 u64로 승격되며, u64를 넘으면 f64로 폴백합니다. 부동소수점은 토큰(1.0, 2e3)에서 감지되므로 serde 역직렬화가 부동소수점과 정수의 불일치로 실패하지 않습니다.
관용적이고 컴파일 가능한 식별자
키는 #[serde(rename)]으로 원래 키로 되돌리는 snake_case 필드가 됩니다. Rust 키워드, 중복 이름, 식별자가 아닌 키는 정제되므로 출력은 항상 컴파일됩니다.
100% 클라이언트 측
파싱과 생성이 네트워크 호출 없이 브라우저에서 실행되므로 데이터가 비공개로 유지됩니다.

깔끔한 Rust 구조체를 위한 팁

루트 구조체 이름 짓기
읽기 쉬운 코드를 위해 기본값 Root 대신 의미 있는 루트 이름(예: User, ApiResponse)을 설정하세요.
serde_json은 필요할 때만 추가
serde_json::Value는 비어 있거나 타입이 혼합된 배열과 null만 있는 필드에서 나타납니다. 가능하면 더 풍부한 샘플에서 그 필드에 구체적인 타입을 주거나, Cargo.toml에 serde_json을 추가하세요.
Option과 필수를 검토
필드는 샘플이 그것을 생략할 때만 Option<T>로 표시됩니다. 대표적인 페이로드를 붙여넣어 도구가 필수 필드와 선택적 필드를 정확히 추론하도록 하세요.

자주 묻는 질문

JSON을 Rust 구조체로 어떻게 변환하나요?
입력 상자에 JSON을 붙여넣으세요. 변환기가 브라우저에서 즉시 파싱하여 오른쪽에 serde derive가 붙은 Rust 구조체를 생성합니다. 복사를 클릭하면 결과를 가져올 수 있습니다 — 업로드도, 계정도, 대기 시간도 없습니다.
serde derive를 생성하나요? serde와 serde_json이 필요한가요?
네 — 출력은 기본적으로 #[derive(Debug, Clone, Serialize, Deserialize)]를 사용합니다. Cargo.toml에 derive feature를 켠 serde를 추가하세요. serde_json을 의존성으로 추가해야 하는 경우는 출력에 serde_json::Value가 포함될 때뿐이며, 이는 빈 배열이나 혼합 배열, null만 있는 필드에서 나타납니다. serde 토글을 끄면 순수한 구조체가 생성됩니다.
생성된 구조체로 JSON을 파싱하려면 어떻게 하나요?
Cargo.toml에 serde_json을 추가한 다음 한 줄로 역직렬화하세요: let root: Root = serde_json::from_str(json)?;. 생성된 Deserialize derive가 나머지를 처리합니다 — 바이트 슬라이스에는 serde_json::from_slice, 파일이나 HTTP 본문에는 from_reader, 다시 직렬화할 때는 serde_json::to_string을 사용하세요.
선택적 필드와 null 필드는 어떻게 처리되나요?
어떤 키가 일부 배열 항목에는 있고 다른 항목에는 없으면 Option 필드가 됩니다. 항상 null이기만 한 필드는 선택적인 serde_json::Value가 됩니다. serde는 Option을 자동으로 선택적으로 취급하므로 #[serde(default)] 속성은 추가되지도 필요하지도 않습니다.
camelCase 키와 Rust 키워드는 어떻게 처리하나요?
필드 이름은 관용적인 snake_case로 변환되고, #[serde(rename)] 속성이 정확한 JSON 키로 다시 매핑합니다. type이나 match 같은 예약 키워드는 rename과 함께 type_ 또는 match_로 출력되며, 이는 원시 식별자보다 견고합니다. self, crate, super까지 함께 다루기 때문입니다.
필드별 rename 대신 #[serde(rename_all)]을 쓸 수 있나요?
이 도구는 필드별 #[serde(rename)]을 출력합니다. 하나의 페이로드가 camelCase, snake_case, 불규칙한 키를 섞어 쓰더라도 항상 작동하기 때문입니다. 구조체의 모든 필드가 하나의 관례를 따른다면, 그 속성들을 지우고 대신 구조체에 하나의 #[serde(rename_all = "camelCase")]을 붙이세요. 둘 다 동일하게 역직렬화됩니다.
어떤 Rust 숫자 타입을 사용하나요?
정수는 i64로 매핑되고, 값이 i64::MAX를 넘으면 u64가 되며, u64를 넘으면 f64로 폴백합니다 — 그래서 큰 ID도 왕복 변환됩니다. 소수점이나 지수가 있는 숫자(예: 1.0 또는 2e3)는 f64로 매핑되는데, serde가 부동소수점을 정수 필드에 넣는 것을 거부하기 때문입니다.
날짜와 타임스탬프는 어떻게 타입이 지정되나요?
JSON에는 날짜 타입이 없어서 2011-01-25 같은 ISO 문자열이나 RFC 3339 타임스탬프는 String으로 나옵니다. 실제 날짜 처리가 필요하면 필드를 chrono 타입 — Utc 시간대의 DateTime, 또는 NaiveDate — 으로 바꾸고 chrono의 serde feature를 켜세요. 그러면 serde가 RFC 3339를 자동으로 파싱합니다.
동적이거나 알 수 없는 키를 가진 객체는 어떻게 처리하나요?
키가 달라질 때 — 예를 들어 ID에서 값으로의 맵 — 생성된 구조체를 String을 키로 하는 HashMap으로 바꾸세요. 타입이 지정된 구조체를 유지하면서 추가 필드도 담으려면 HashMap 타입의 #[serde(flatten)] 필드를 추가하세요. 완전히 동적인 값에는 serde_json::Value가 만능 타입입니다.
제 JSON 데이터는 비공개이고 안전한가요?
네. 변환은 JavaScript를 사용해 100% 브라우저에서 처리됩니다. 토큰, ID, 고객 데이터를 포함한 JSON이 페이지를 벗어나지 않으며 서버로 전송되지 않습니다.
serde 없이 순수한 Rust 구조체를 생성할 수 있나요?
네. serde 토글을 끄면 use serde 줄, Serialize와 Deserialize derive, 그리고 모든 #[serde(rename)] 속성이 제거되어 깔끔한 구조체만 남습니다. Debug와 Clone derive, pub 가시성도 토글할 수 있습니다.
이 도구는 무료인가요? 계정이 필요한가요?
가입도, 제한도, 작업 공간을 어지럽히는 광고도 없이 완전히 무료입니다.

Base64 디코더 · 인코더 (Base64 Decoder & Encoder)

인코딩 & 포매팅

Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.

Base64 이미지 변환기 (온라인)

인코딩 & 포매팅

Base64 문자열이나 데이터 URI를 온라인 브라우저에서 이미지로 디코딩합니다. 미리보고, 치수와 MIME을 읽은 뒤 PNG, JPG, GIF, SVG로 다운로드하세요. 업로드 없음.

CSV to JSON 변환기 (CSV to JSON Converter)

인코딩 & 포매팅

브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.

.env을 JSON으로 변환하는 도구

인코딩 & 포매팅

.env 파일을 붙여넣으면 즉시 JSON으로 변환됩니다. 데이터베이스 비밀번호, API 키, 토큰이 브라우저를 절대 벗어나지 않는 100% 비공개 무료 온라인 dotenv 파서입니다.

무료 HTML 엔티티 디코더 — HTML 언이스케이프

인코딩 & 포매팅

온라인에서 HTML 엔티티를 디코딩하고 HTML을 언이스케이프하세요. 무료, 가입 불필요, 100% 브라우저에서 처리. 이름·10진수·16진수 참조를 문자로 되돌리며 업로드 없음.

무료 HTML 엔티티 인코더 — HTML 이스케이프

인코딩 & 포매팅

온라인에서 HTML 엔티티를 인코딩하고 특수문자(< > & " ')를 이스케이프하세요. 무료, 100% 브라우저에서 처리. 이름·10진수·16진수 출력, 업로드 없음.