Kako raščlaniti JSON u C ++

How Parse Json C

Namjera ovog vodiča je razumjeti JSON podatke i kako raščlaniti JSON podatke u C ++. Razgovarat ćemo o JSON podacima, Objektu, Arrayu, JSON sintaksi, a zatim ćemo proći kroz nekoliko radnih primjera kako bismo razumjeli mehanizam raščlanjivanja JSON podataka u C ++.

Što je JSON?

JSON je lagani tekstualni prikaz za pohranu i prijenos strukturiranih podataka na organiziran način. JSON podaci predstavljeni su u obliku uređenih popisa i parova ključ-vrijednost. JSON je kratica za J ava S bogalj ILI bject N otacija. Kao što puno ime ukazuje, izvedeno je iz JavaScripta. Međutim, JSON podaci podržani su u većini popularnih programskih jezika.



Često se koristi za prijenos podataka s poslužitelja na web stranicu. Mnogo je lakše i čišće predstavljati strukturirane podatke u JSON -u nego u XML -u.



Pravilo sintakse JSON

Evo pravila sintakse JSON:



  1. JSON podaci uvijek trebaju biti u obliku parova ključ / vrijednost.
  2. JSON podaci odvajaju se zarezima.
  3. Curly zagrada se koristi za predstavljanje JSON objekta.
  4. Uglata zagrada koristi se za predstavljanje JSON niza.

Što su JSON podaci?

JSON podaci predstavljeni su u obliku parova ključ / vrijednost. Ovo je slično rječniku ili hashu u drugim programskim jezicima.

Ime: Drake

Ovo je primjer jednostavnih JSON podataka. Ovdje je ključ Ime, a Drake odgovarajuća vrijednost. Ključ, tj. Ime i vrijednost, tj. Drake odvojeni su dvotočkom.



JSON nastavak datoteke

JSON podaci obično se pohranjuju u datoteku s nastavkom .json. Na primjer, za pohranu podataka o zaposleniku datoteku možete jednostavno nazvati 'zaposlenik.json'. Ovo bi bila jednostavna tekstualna datoteka. Zatim možete otvoriti ovu JSON datoteku u bilo kojem od svojih omiljenih uređivača teksta.

JSON objekt

JSON objekt nije ništa drugo nego JSON podaci zatvoreni unutar uvrnutih zagrada. Evo primjera JSON objekta:

{
Ime:Drake,
ID zaposlenika:23547a,
Telefon: 23547,
Odjel:Financije
}

JSON objekt može sadržavati više JSON podataka. Svaki JSON podatak odvojen je zarezom. JSON podaci predstavljeni su kao parovi ključ / vrijednost. Ključ, tj. Ime i vrijednost, tj. Drake odvojeni su dvotočkom. U gornjem primjeru postoje četiri para ključ / vrijednost. Prvi ključ je Ime; Drake je odgovarajuća vrijednost za to. Slično, EmployeeID, Phone i Department su ostala tri ključa.

JSON niz

JSON niz može sadržavati nekoliko JSON objekata odvojenih zarezima. JSON niz zatvoren je u uglastu zagradu. Pogledajmo primjer JSON niza:

'Studenti':[
{'ime':'Sean', 'prezime':'Smeđa'},
{'ime':'Drake', 'prezime':'Williams'},
{'ime':'Tom', 'prezime':'Mlinar'},
{ime:Petar,prezime:Johnson}
]

Ovo je primjer JSON niza. Ovdje je Student zatvoren uglastom zagradom, tj. Nizom i sadrži četiri JSON objekta. Svaki od ovih objekata predstavljen je u obliku parova ključ-vrijednost i odvojen je zarezom.

Primjer JSON datoteke

Budući da smo razumjeli JSON podatke, JSON objekte, JSON niz, pogledajmo primjer JSON datoteke:

{
ime:Sean,
prezime:Smeđa,
studentska iskaznica: 21453,
Odjel:Računalo Sc.,
Predmeti:[Matematika,Phy,Chem]
}

Raščlanjivanje knjižnica u C ++:

Ne postoji izvorno rješenje za raščlanjivanje JSON podataka u C ++. Međutim, postoji nekoliko knjižnica za raščlanjivanje JSON podataka u C ++. U ovom članku ćemo pogledati dvije najpopularnije knjižnice za raščlanjivanje JSON podataka u C ++. Evo GitHub veza za raščlanjivanje JSON podataka:

  1. https://github.com/nlohmann/json
  2. https://github.com/Tencent/rapidjson/

Možda ćete htjeti preuzeti ove knjižnice kako biste mogli izvršiti dolje prikazane primjere.

Primjeri

Sada imamo osnovno razumijevanje JSON podataka, objekata, nizova i dostupnih biblioteka za raščlanjivanje. Pogledajmo sada nekoliko primjera za raščlanjivanje JSON podataka u C ++:

  • Primjer-1: Raščlanite JSON u C ++
  • Primjer-2: Raščlanite i serijalizirajte JSON u C ++
  • Primjer-3: Raščlanite JSON u C ++

Za Primjere-1 i Primjere-2 koristit ćemo se nlohmann knjižnicom. U slučaju Primjera 3, koristit ćemo knjižnicu RapidJSON.

Primjer-1: Raščlanite JSON u C ++

U ovom primjeru programa pokazat ćemo kako pristupiti vrijednostima JSON podataka u C ++.

#uključi
#include 'json.hpp'

koristeći json=nlohmann::json;

intglavni()
{

// jdZaposlenici
json jdZaposlenici=
{
{'ime','Sean'},
{'prezime','Smeđa'},
{'Studentska iskaznica',21453},
{'Odjel','Računalno sc.'}
};

// Pristupite vrijednostima
sati::nizfNaziv=jdZaposlenici.vrijednost('ime', 'ups');
sati::nizlIme=jdZaposlenici.vrijednost('prezime', 'ups');
intsID=jdZaposlenici.vrijednost('Studentska iskaznica', 0);
sati::nizdubina=jdZaposlenici.vrijednost('Odjel', 'ups');

// Ispis vrijednosti
sati::trošak << 'Ime: ' <<fNaziv<<sati::endl;
sati::trošak << 'Prezime: ' <<lIme<<sati::endl;
sati::trošak << 'Studentska iskaznica: ' <<sID<<sati::endl;
sati::trošak << 'Odjel:' <<dubina<<sati::endl;

povratak 0;
}

Primjer-2: Raščlanite i serijalizirajte JSON u C ++

U ovom primjeru programa ćemo vidjeti kako raščlaniti i serijalizirati JSON u C ++. Za raščlanjivanje JSON podataka koristimo json :: parse ().

#uključi
#include 'json.hpp'
#uključi

koristeći json=nlohmann::json;

intglavni()
{
// Ovdje je JSON tekst
chartekst[] =R'(
{
'
Knjiga': {
'
Širina': 450,
'
Visina': 30,
'
Titula':'Pozdrav svijete',
'
jeBiografija': false,
'
NumOfCopies': 4,
'
ID knjižnice': [2319, 1406, 3854, 987]
}
}
) '
;

// Analizirajmo i serijaliziramo JSON
json j_kompletno=json::raščlaniti(tekst);
sati::trošak <<sati::setw(4) <<j_kompletno<<sati::endl;
}

Primjer-3: Raščlanite JSON u C ++

Sada ćemo pokazati kako raščlaniti niz JSON pomoću knjižnice RapidJSON. RapidJSON je izvorno inspiriran RapidXML -om. U ovom primjeru programa raščlanjujemo JSON niz u DOM. Deklarirali smo mydoc tipa Document, a zatim smo pomoću metode mydoc.parse () analizirali niz JSON.

#uključi
#uključuje 'rapidjson/writer.h'
#include 'rapidjson/document.h'
#include 'rapidjson/stringbuffer.h'

pomoću prostora imena rapidjson;

intglavni()
{

konst char*json= '{'ime':'Sean','prezime':'Smeđa','empId': 21453,
'
odjel':'Računalo Sc.'}';

// Raščlanite niz JSON u DOM
Dokumentiraj mydoc;
mydoc.Raščlaniti(json);

// DOM u niz
StringBuffer međuspremnik;
Pisac<StringBuffer>pisac(pufer);

mydoc.Prihvatiti(pisac);

// Ispis ispisa
sati::trošak <<pufer.GetString() <<sati::endl;

povratak 0;
}

Zaključak

U ovom smo članku ukratko raspravljali JSON podatke, objekt, niz i sintaksu. Kao što znamo, ne postoji izvorno rješenje za raščlanjivanje podataka JSON -a u C ++; koristili smo dvije različite knjižnice za raščlanjivanje JSON podataka u C ++. Pogledali smo tri različita primjera kako bismo demonstrirali JSON mehanizam za raščlanjivanje podataka u C ++. U usporedbi s nlohmann knjižnicom, RapidJSON je mali, brz i prilagođen memoriji.