C:
Arbeide med JSON

Hvordan:

For å jobbe med JSON i C, vil du vanligvis bruke et bibliotek som jansson eller json-c på grunn av Cs mangel på innebygd støtte for JSON. Her vil vi fokusere på jansson på grunn av dets brukervennlighet og aktive vedlikehold. Først, installer biblioteket (f.eks., ved å bruke en pakkehåndterer som apt på Ubuntu: sudo apt-get install libjansson-dev).

La oss starte med å parse en JSON-streng og få tilgang til innholdet:

#include <jansson.h>
#include <stdio.h>

int main() {
    const char *json_string = "{\"name\":\"John Doe\",\"age\":30}";
    json_error_t error;
    json_t *root = json_loads(json_string, 0, &error);
    
    if (!root) {
        fprintf(stderr, "feil: på linje %d: %s\n", error.line, error.text);
        return 1;
    }
    
    const char *name;
    int age;
    json_unpack(root, "{s:s, s:i}", "name", &name, "age", &age);
    
    printf("Navn: %s\nAlder: %d\n", name, age);
    
    json_decref(root);
    return 0;
}

Eksempelutdata:

Navn: John Doe
Alder: 30

Videre, å opprette og skrive ut et JSON-objekt:

#include <jansson.h>
#include <stdio.h>

int main() {
    json_t *root = json_object();
    json_object_set_new(root, "name", json_string("Jane Doe"));
    json_object_set_new(root, "age", json_integer(25));
    
    char *json_dump = json_dumps(root, JSON_ENCODE_ANY);
    printf("%s\n", json_dump);
    
    gratis(json_dump);
    json_decref(root);
    return 0;
}

Eksempelutdata:

{"name": "Jane Doe", "age": 25}

Disse eksemplene demonstrerer grunnleggende om å laste en JSON-streng, pakke ut verdiene, opprette et nytt JSON-objekt, og deretter skrive det ut som en streng.

Dypdykk

Behovet for å jobbe med JSON i C oppstår fra webbens adopsjon av JSON som et primært format for datautveksling. JSONs enkelhet og effektivitet gjorde at den raskt forbigikk XML, til tross for Cs opprinnelige fravær i direkte støtte for JSON-manipulasjon. Tidlige løsninger involverte manuell strengmanipulasjon - feilutsatt og ineffektivt. Biblioteker som jansson og json-c oppsto for å fylle dette gapet, og tilbyr robuste APIer for parsing, konstruksjon og serialisering av JSON.

Selv om jansson tilbyr enkelhet og brukervennlighet, kan json-c tiltrekke de som ser etter et bredere funksjonssett. Likevel, alternativer som parsingbiblioteker i C++ tilbyr mer sofistikerte abstraksjoner, takket være det språkets mer komplekse datastrukturer og støtte fra standardbiblioteket. Imidlertid, når man jobber i miljøer der C er det foretrukne eller nødvendige språket - som i innebygde systemer eller når man skal grensesnitt med eksisterende C-biblioteker - blir bruk av jansson eller json-c uunnværlig.

Det er også verdt å nevne at arbeid med JSON i C innebærer en dypere forståelse av minnehåndtering, da disse bibliotekene ofte returnerer dynamisk allokerte objekter som krever eksplisitt deallokering. Dette utfordrer programmerere til å balansere bekvemmelighet med ansvaret for å forhindre minnelekkasjer, en avgjørende del av å utforme effektiv C-kode.