왼쪽에 C++을 붙여 넣고 "변환"을 누르세요 — JSON으로 바꿔 드립니다C++ 코드를 붙여 넣으세요

이 도구가 하는 일

C++ struct와 형태가 맞는 JSON 페이로드가 필요했던 적이 있다면 — API에 넣든, 픽스처로 쓰든, 설정 파일로 쓰든 — 늘 똑같은 과정을 아실 겁니다. nlohmann::json을 끌어오고, to_json 글루 코드를 쓰고, 다시 빌드. 여기에 C++을 붙여 넣으면 그 단계들을 전혀 거치지 않고도 유효한 JSON이 나옵니다. 단일 초기화자 하나든, 여러 개의 struct가 들어 있는 헤더 전체든, 중첩 템플릿 범벅이든 결과는 같습니다 — 필드가 전부 보존된 깨끗한 JSON 문서입니다.

이 변환기는 C++ 값들이 실제로 어떻게 직렬화되는지 알고 있습니다. std::string은 JSON 문자열로, 49.99f42u 같은 숫자 리터럴은 접미사를 뗀 JSON 숫자로, booltrue/false로, std::vector<T> / std::array<T,N>은 JSON 배열로 변환됩니다. std::nulloptstd::optional<T>null로, 값이 있으면 내부 타입을 직렬화합니다. 문자열 키를 쓰는 std::mapstd::unordered_mapcppreference 규약대로 JSON 객체가 됩니다.

C++20의 지정 초기화자(.field = value)는 물론, 집합체 초기화 리스트도 처리합니다. 여러 개의 struct를 한 번에 붙여 넣으면 각각이 JSON의 최상위 항목으로 나오고, 중첩된 타입도 전개됩니다. Boost.JSON 쪽에서 오셨다면, 출력은 boost::json::value_from에서 기대할 만한 그 결과와 같습니다 — 템플릿 곡예는 빼고요.

사용 방법

세 단계입니다. 초기화 리스트 하나를 붙이든, struct가 열 몇 개 들어간 헤더를 통째로 붙이든 동일합니다.

1

C++을 붙여 넣거나 샘플을 불러오세요

왼쪽 에디터에 C++을 있는 그대로 넣으세요. struct 정의, 클래스, 초기화 리스트, 여러 타입, 중첩 구조 — 다 괜찮습니다. 먼저 현실적인 예시를 보고 싶다면 "샘플 불러오기"를 눌러 보세요.

#include 지시문이나 네임스페이스, 템플릿을 굳이 걷어낼 필요는 없습니다. C++ 문법을 그대로 두셔도 파서가 알아서 처리합니다. 표준 자체를 참고하고 싶다면 ISO C++에 공식 자료가 있습니다.

2

변환을 누르세요

초록색 "변환" 버튼을 누르면 도구가 C++을 읽어 들여 모든 struct와 필드를 보존한 채 한 번에 JSON을 뽑아냅니다. 처리되는 동안 짧은 로딩 표시가 나옵니다.

3

JSON 복사

오른쪽 패널이 들여쓰기된 JSON으로 채워집니다. 이걸 REST 호출, 테스트 픽스처, CMakeLists 옆의 설정 파일, 문서 등에 복사해 넣으시면 됩니다. 그게 전부입니다.

실제로 편한 상황

API 요청 페이로드

C++ 요청 struct가 있고, curl이나 Postman에 넣을 JSON이 필요할 때. struct를 붙여 넣고 JSON을 받아서 다음 작업으로.

설정 파일 템플릿

멤버가 40개인 Settings 구조체가 바로 편집할 수 있는 JSON 템플릿이 됩니다 — 손으로 골격 만들 일도, 키 빼먹을 일도 없습니다.

코드와 어긋나지 않는 문서

README나 API 레퍼런스용 JSON 예시를 실제 struct에서 바로 뽑아내세요. 문서가 현실과 따로 노는 일이 줄어듭니다.

테스트 픽스처와 시드

유닛 테스트의 초기화 리스트를 통합 테스트·모의 서버·DB 로더용 JSON 시드 파일로 바꿔 쓸 수 있습니다.

자주 묻는 질문

nlohmann::json이나 Boost를 설치해야 하나요?

아니요. 이 도구는 서버에서 돌아가고 코드를 실행하지 않습니다 — 직렬화 라이브러리를 끌어들이지 않고도 JSON이 나옵니다. 런타임에 쓸 라이브러리가 필요하면 nlohmann/jsonBoost.JSON 모두 탄탄한 선택입니다.

std::optional, std::variant, 스마트 포인터도 처리되나요?

std::nulloptstd::optional<T>null이 되고, 값이 있으면 내부 타입을 직렬화합니다. std::unique_ptrstd::shared_ptr도 똑같이 — 비었으면 null, 아니면 가리키는 값입니다. std::variant는 현재 활성화된 대안을 씁니다.

std::vector, std::map 같은 컨테이너는요?

std::vector, std::array, std::list, std::set, std::deque는 모두 JSON 배열이 됩니다. 문자열 키의 std::map / std::unordered_map은 JSON 객체가 되고, 문자열이 아닌 키는 cppreference 컨테이너 의미에 따라 문자열화됩니다.

여러 struct를 한 번에 붙여 넣어도 되나요?

네 — 헤더 전체나 .cpp 파일을 통째로 붙이셔도 됩니다. 최상위 집합체 각각이 JSON의 고유 키로 나오고, 중첩된 타입도 전개됩니다. 기반 클래스에서 상속한 멤버도 포함됩니다.

제 코드가 저장되나요?

코드는 변환을 위해 백엔드로 전송되지만 영구 저장되지 않습니다 — 페이로드를 로깅하지도 않습니다. 그래도 정말 민감한 코드라면 붙여 넣기 전에 한 번 훑어 보시길 권합니다.

템플릿, 매크로, 람다가 섞여 있으면요?

구체 타입으로 인스턴스화된 템플릿은 문제없이 돌아갑니다. 인스턴스화되지 않은 템플릿, 매크로, 람다는 전체 변환을 실패시키는 대신 null로 내보내므로 나머지 데이터는 그대로 나옵니다. 명백한 구문 오류는 먼저 고쳐 주세요 — 파서가 관대하긴 하지만 완전한 컴파일러는 아닙니다.

함께 쓰면 좋은 도구들

C++ to JSON은 퍼즐의 한 조각입니다. 다음 도구들과 잘 어울립니다: