Próbuję znaleźć dobry sposób na parsowanie JSON w C. Naprawdę nie potrzebuję ogromnej biblioteki ani niczego innego, wolałbym mieć coś małego i lekkiego z absolutnym minimum funkcji, ale dobrą dokumentacją.
Czy ktoś ma coś, na co może mi wskazać?
Próbuję znaleźć dobry sposób na parsowanie JSON w C. Naprawdę nie potrzebuję ogromnej biblioteki ani niczego innego, wolałbym mieć coś małego i lekkiego z absolutnym minimum funkcji, ale dobrą dokumentacją.
Czy ktoś ma coś, na co może mi wskazać?
{, [, ], }, ,, ", i backslash. Mogą, ale nie muszą, pozostawić przełączanie sekwencji ucieczki Unicode Tobie, mogą pozostawić Tobie sprawdzenie, czy liczby mieszczą się w dopuszczalnym zakresie Unicode itp. Następnie istnieje zasadnicza różnica między analizowaniem dowolnego JSON na drzewa a znanym JSON w C struktury.
Odpowiedzi:
Json nie jest ogromnym językiem na początek, więc biblioteki dla niego prawdopodobnie będą mniejsze (przynajmniej niż biblioteki Xml).
Istnieje całe mnóstwo C bibliotek połączone w json.org . Może któryś z nich dobrze Ci się sprawdzi.
cJSON ma przyzwoite API i jest mały (2 pliki, ~ 700 linii). Wiele innych parserów JSON, które oglądałem na początku, było ogromnych ... Chcę tylko przeanalizować trochę JSON.
Edycja: przez lata wprowadziliśmy kilka ulepszeń w cJSON.
Jsmn jest dość minimalistyczny i ma tylko dwie funkcje do pracy.
/* Allows escaped symbol \uXXXX */... case 'u':.../* TODO */
NXJSON to w pełni funkcjonalny, ale bardzo mały (~ 400 linii kodu) parser JSON, który ma łatwe w użyciu API:
const nx_json* json=nx_json_parse_utf8(code);
printf("hello=%s\n", nx_json_get(json, "hello")->text_value);
const nx_json* arr=nx_json_get(json, "my-array");
int i;
for (i=0; i<arr->length; i++) {
const nx_json* item=nx_json_item(arr, i);
printf("arr[%d]=(%d) %ld\n", i, (int)item->type, item->int_value);
}
nx_json_free(json);
Możesz rzucić okiem na Jansson
Witryna internetowa stwierdza, co następuje: Jansson to biblioteka C do kodowania, dekodowania i manipulowania danymi JSON. Zawiera:
jsmnze względu na jego szybkość [1], ale nie obsługuje kodowania. Ponadto Jansson jest naprawdę łatwy w użyciu. --- [1] translate.google.it/…
Użyłem JSON-C do projektu pracy i poleciłbym go. Lekki i wydany z otwartą licencją.
Dokumentacja jest dołączona do dystrybucji. Zasadniczo masz *_addfunkcje do tworzenia obiektów JSON, równoważne *_putfunkcje do zwalniania ich pamięci oraz funkcje narzędziowe, które konwertują typy i obiekty wyjściowe w reprezentację ciągu.
Licencja umożliwia włączenie do projektu. Użyliśmy go w ten sposób, kompilując JSON-C jako bibliotekę statyczną, która jest połączona z główną kompilacją. W ten sposób nie musimy martwić się o zależności (poza instalacją Xcode).
JSON-C również zbudował dla nas bez żadnych incydentów pod OS X (x86 Intel) i Linux (x86 Intel). Jeśli Twój projekt musi być przenośny, jest to dobry początek.
Czy potrzebujesz analizować dowolne struktury JSON, czy tylko dane specyficzne dla Twojej aplikacji. Jeśli to drugie, możesz sprawić, że będzie dużo lżejszy i bardziej wydajny, ponieważ nie musisz generować żadnej struktury tablicy skrótów / mapy mapującej klucze JSON na wartości; zamiast tego możesz po prostu przechowywać dane bezpośrednio w polach strukturalnych lub czymkolwiek.