Wklej C po lewej i kliknij "Convert" — zamienimy to na JSONWklej kod C

Co ten tool robi

Jeśli kiedyś potrzebowałeś JSON payloadu, który odzwierciedla strukturę z C — do testu serwisu zbudowanego gcc, do configu embedded device'a, albo do kawałka dokumentacji — wiesz, jak to zwykle wygląda: wciągnąć cJSON, napisać glue code per field, rebuildować, debugować. Wklej C tutaj i dostaniesz poprawny JSON bez dotykania Makefile'a. Ogarnia pojedynczy designated initializer, header z kilkoma struct-ami, albo coś z zagnieżdżonymi typami i tablicami — ten sam wynik: czysty dokument JSON z zachowanym każdym fieldem.

Converter rozumie, jak wartości C faktycznie się serializują. int, long, size_t, float i double lądują jako JSON numbers. Tablice char i string literale stają się JSON stringami. bool z stdbool.h staje się true/false. Tablice o stałym rozmiarze (int items[3]) stają się JSON arrayami z prawidłową długością. Zagnieżdżone struct-y — np. Address w Order — rozwijają się w zagnieżdżone JSON objecty. Zachowanie trzyma się referencji języka C.

Designated initializery z C99 (.field = value) są w pełni wspierane — tak się dzisiaj normalnie pisze struct literale w realnym kodzie. Aliasy typedef są rozwiązywane, a wartości enum wychodzą albo jako wartość liczbowa, albo jako nazwa symbolu, w zależności od kontekstu. Typy union serializują aktywny member. Pointery wskazujące na NULL stają się JSON null; w przeciwnym wypadku wskazywana wartość jest rozwijana. Wklej kilka struct-ów naraz i każdy staje się top-level keyem w outpucie.

Jak tego używać

Trzy kroki. Działa tak samo na dwuliniowy initializer, jak na pełny header z dwudziestoma typedef-ami.

1

Wklej swoje C (albo załaduj przykład)

Wrzuć swoje C bez zmian do lewego edytora. Definicja struct, typedef, designated initializer, kilka struct-ów, albo zagnieżdżone tablice — wszystko gra. Kliknij Load Sample, żeby najpierw zobaczyć realistyczny przykład.

Nie musisz usuwać dyrektyw #include ani atrybutów specyficznych dla kompilatora. Zostaw składnię ISO C w spokoju — parser to ogarnie. Zarówno C89, jak i nowoczesne C (C11/C17/C23) są okej.

2

Wciśnij Convert

Kliknij zielony przycisk Convert. Tool czyta C, przechodzi po każdym struct-cie, rozwija initializery i wypluwa JSON w jednym przebiegu. W trakcie widać wskaźnik ładowania.

3

Skopiuj JSON

Prawy panel wypełnia się wciętym JSON-em. Skopiuj go do swojego klienta HTTP, configu embedded firmware'u, fixture'a testowego albo README. To cały loop — żadnego kroku buildu.

Kiedy to naprawdę ratuje

Config embedded i firmware

Masz struct configu urządzenia w C i potrzebujesz wersji JSON do endpointu REST albo do toola do provisioningu. Wklej struct, weź JSON, wyślij.

Payloady requestów API

Serwis w C owijający zewnętrzne API. Wklej struct requestu, dostań JSON, którym możesz zatestować curl-em, zanim w produkcji podepniesz cJSON.

Fixturey do testów jednostkowych

Zamień designated initializery z twoich unit testów na pliki JSON seed do testów integracyjnych albo porównań golden-file.

Docsy, które zgadzają się z kodem

Generuj przykłady JSON do README albo dokumentu protokołu prosto z twoich realnych struct-ów, żeby dokumentacja siedziała w syncu z header file'em.

Częste pytania

Potrzebuję zainstalowanego cJSON albo Jansson?

Nie. Ten tool działa server-side i nie kompiluje twojego kodu — dostajesz JSON bez wciągania biblioteki do serializacji. Jeśli chcesz opcję w runtimie, cJSON to typowy wybór; Jansson też jest spoko.

Rozumie designated initializery i typedef-y?

Tak. Designated initializery z C99 (.field = value) są w pełni wspierane, a aliasy typedef są rozwiązywane do struktury pod spodem. Zagnieżdżone designated initializery rozwijają się tak samo, jak by je ułożył kompilator.

A co z tablicami, pointerami i NULL-em?

Tablice o stałym rozmiarze stają się JSON arrayami z właściwą liczbą elementów. Pointer membery, które są NULL, stają się JSON null; w przeciwnym wypadku wskazywana wartość jest rozwijana. Tablice struct-ów działają tak samo — każdy element to zagnieżdżony JSON object.

Jak obsługiwane są enumy i uniony?

Wartości enum wychodzą jako nazwa symbolu albo wartość liczbowa, w zależności od kontekstu. Typy union serializują aktualnie aktywny member. Bitfieldy (unsigned flags : 4) stają się liczbami.

Czy mój kod jest gdzieś zapisywany?

Twój kod idzie na backend do konwersji i nie jest trwale przechowywany — nie logujemy payloadu. Jeśli kod jest naprawdę wrażliwy (embedded firmware z sekretami, detale wewnętrznego protokołu), prześwietl go, zanim wkleisz.

A jeśli w C są makra albo rozszerzenia kompilatora?

Makra, które rozwijają się do wartości, działają; makra function-like, które robią prawdziwą logikę, są traktowane jako nieprzejrzyste i emitowane jako null, zamiast wywalać cały proces. Atrybuty GCC i MSVC (__attribute__, __declspec) są tolerowane i ignorowane.

Inne toole, które mogą się przydać

C do JSON to tylko kawałek układanki. Te pasują do tego dobrze: