왼쪽에 C를 붙여넣고 "Convert"를 누르세요. JSON으로 바꿔드립니다C 코드 붙여넣기

이 툴이 하는 일

C struct을 그대로 반영한 JSON payload가 필요했던 적 있을 겁니다. gcc로 빌드한 서비스 테스트, 임베디드 디바이스 설정, 문서 한 조각 — 보통은 이런 흐름이죠. cJSON 가져오고, 필드마다 glue 코드 작성하고, 리빌드하고, 디버깅. 여기에 C를 붙여넣으면 Makefile을 건드리지 않고 유효한 JSON이 나옵니다. designated initializer 하나든, struct가 여러 개 들어있는 헤더든, 중첩 타입과 배열이 있는 코드든 결과는 같습니다. 모든 필드가 보존된 깔끔한 JSON 문서.

이 변환기는 C 값들이 실제로 어떻게 시리얼라이즈되는지 이해합니다. int, long, size_t, float, double은 전부 JSON number가 됩니다. char 배열과 문자열 리터럴은 JSON string이 되고요. stdbool.hbooltrue/false로. 고정 배열 (int items[3])은 길이가 맞는 JSON 배열로. 중첩된 struct — 예를 들어 Order 안의 Address — 은 중첩 JSON 객체로 펼쳐집니다. 동작은 C 언어 레퍼런스를 따릅니다.

C99 designated initializer (.field = value)는 완전 지원입니다. 요즘 실무에서 struct 리터럴 쓸 때 가장 흔한 방식이죠. typedef 별칭은 해석되고, enum 값은 컨텍스트에 따라 숫자 값이나 심볼 이름으로 나옵니다. union 타입은 현재 활성 멤버를 시리얼라이즈합니다. NULL을 가리키는 포인터 멤버는 JSON null이 되고, 그 외에는 가리키는 값이 펼쳐집니다. struct 여러 개를 한 번에 붙여넣으면 각각이 출력의 top-level 키가 됩니다.

사용법

세 단계. 두 줄짜리 initializer든, typedef 스무 개가 든 전체 헤더든 똑같이 동작합니다.

1

C를 붙여넣기 (또는 샘플 불러오기)

왼쪽 에디터에 C를 그대로 넣으세요. struct 정의, typedef, designated initializer, 여러 struct, 중첩 배열 — 전부 괜찮습니다. Load Sample을 누르면 실제 같은 예시를 먼저 볼 수 있어요.

#include 디렉티브나 컴파일러 고유 속성을 제거할 필요 없습니다. ISO C 문법 그대로 두세요. 파서가 알아서 처리합니다. C89든 최신 C (C11/C17/C23)든 다 됩니다.

2

Convert 누르기

초록색 Convert 버튼을 누르세요. 툴이 C를 읽고, 각 struct을 훑고, initializer를 펼쳐서, 한 번에 JSON을 뱉습니다. 처리되는 동안 로딩 인디케이터가 표시됩니다.

3

JSON 복사

오른쪽 패널이 들여쓰기된 JSON으로 채워집니다. HTTP 클라이언트, 임베디드 펌웨어 설정, 테스트 픽스처, README에 복사해서 쓰세요. 빌드 단계 없이 이게 전부입니다.

진짜 쓸모 있는 순간

임베디드 설정 & 펌웨어

C로 디바이스 설정 struct이 있고 REST 엔드포인트나 프로비저닝 툴에 넣을 JSON 버전이 필요할 때. struct 붙여넣고, JSON 받고, 배포.

API 요청 payload

서드파티 API를 감싸는 C 서비스. 요청 struct을 붙여넣으면, 프로덕션에 cJSON 엮기 전에 curl로 테스트할 수 있는 JSON이 나옵니다.

유닛 테스트 픽스처

유닛 테스트의 designated initializer를 통합 테스트나 golden-file 비교용 JSON seed 파일로 변환.

코드와 맞는 문서

README나 프로토콜 문서용 JSON 예제를 실제 struct에서 바로 생성. 헤더 파일과 문서가 안 엇갈립니다.

자주 묻는 질문

cJSON이나 Jansson이 설치돼 있어야 하나요?

아니요. 이 툴은 서버 사이드에서 돌고 당신의 코드를 컴파일하지 않습니다. 시리얼라이제이션 라이브러리를 엮지 않고도 JSON이 나옵니다. 런타임 옵션이 필요하면 cJSON이 보통 선택이고, Jansson도 괜찮습니다.

designated initializer와 typedef을 이해하나요?

네. C99 designated initializer (.field = value)는 완전 지원이고, typedef 별칭은 원래 struct까지 해석됩니다. 중첩된 designated initializer는 컴파일러가 배치하는 방식 그대로 펼쳐집니다.

배열, 포인터, NULL은 어떻게 되나요?

고정 크기 배열은 원소 개수가 맞는 JSON 배열이 됩니다. NULL인 포인터 멤버는 JSON null로, 그 외에는 가리키는 값이 펼쳐집니다. struct 배열도 똑같이 — 각 원소가 중첩된 JSON 객체입니다.

enum과 union은 어떻게 처리되나요?

enum 값은 컨텍스트에 따라 심볼 이름이나 숫자 값으로 나옵니다. union 타입은 현재 활성 멤버를 시리얼라이즈합니다. 비트필드 (unsigned flags : 4)는 숫자가 됩니다.

제 코드가 저장되나요?

코드는 변환을 위해 백엔드로 보내지지만 저장되지는 않습니다. payload도 로깅하지 않습니다. 코드가 정말 민감하다면 (시크릿이 들어간 임베디드 펌웨어, 내부 프로토콜 상세) 붙여넣기 전에 한 번 검토하세요.

C에 매크로나 컴파일러 확장이 있으면요?

값으로 확장되는 매크로는 동작합니다. 실제 로직을 수행하는 function-like 매크로는 불투명한 것으로 취급하고, 중단하는 대신 null로 출력합니다. GCC와 MSVC 속성 (__attribute__, __declspec)은 허용되고 무시됩니다.

같이 쓰면 좋은 다른 툴들

C to JSON은 퍼즐의 한 조각입니다. 이것들과 잘 어울립니다: