Kuidas parsida JSON -i C ++ keeles

How Parse Json C

Selle õpetuse eesmärk on mõista JSON -i andmeid ja JSON -i andmete parsimist C ++ -is. Arutleme JSONi andmete, objekti, massiivi, JSONi süntaksi üle ja vaatame seejärel läbi mitmeid töönäiteid, et mõista JSONi andmete parsimismehhanismi C ++ -is.

Mis on JSON?

JSON on kergekaaluline tekstipõhine esitus struktureeritud andmete organiseeritud salvestamiseks ja edastamiseks. JSON-i andmed on esitatud tellitud loendite ja võtme-väärtuste paaride kujul. JSON tähistab J ava S kripeldama VÕI bject N märkus. Nagu täisnimi näitab, on see tuletatud JavaScriptist. JSON -i andmeid toetatakse aga enamikus populaarsetes programmeerimiskeeltes.

Seda kasutatakse sageli andmete edastamiseks serverist veebilehele. Struktureeritud andmete esitamine JSONis on palju lihtsam ja puhtam kui XML.



JSONi süntaksi reegel

Siin on JSON -i süntaksireeglid:



  1. JSONi andmed peaksid alati olema võtme-väärtuse paaride kujul.
  2. JSON Andmed eraldatakse komadega.
  3. Lokkis breketit kasutatakse JSON -objekti tähistamiseks.
  4. JSON -massiivi tähistamiseks kasutatakse nurksulge.

Mis on JSONi andmed?

JSON-i andmed on esitatud võtme-väärtuse paaride kujul. See sarnaneb teiste programmeerimiskeelte sõnastiku või räsiga.

Nimi: Drake

See on näide lihtsatest JSON -andmetest. Võti on siin nimi ja Drake on vastav väärtus. Võti, st nimi ja väärtus, st Drake, eraldatakse kooloniga.



JSON -faililaiend

Tavaliselt salvestatakse JSON -andmed faili laiendiga .json. Näiteks töötaja andmete salvestamiseks võite faili lihtsalt nimetada „töötaja.json”. See oleks lihtne tekstifail. Seejärel saate selle JSON -faili avada mis tahes oma lemmiktekstiredaktoris.

JSON -objekt

JSON -objekt ei ole midagi muud kui lokkisulgudes olevad JSON -andmed. Siin on JSON -i näidisobjekt:

{
Nimi:Drake,
töötaja ID:23547a,
Telefon: 23547,
Osakond:Rahandus
}

JSON -objekt võib sisaldada mitmeid JSON -andmeid. Kõik JSON -andmed eraldatakse komaga. JSON-i andmed on esitatud võtme-väärtuse paaridena. Võti, st nimi ja väärtus, st Drake, eraldatakse kooloniga. Ülaltoodud näites on neli võtme-väärtuse paari. Esimene võti on Nimi; Drake on selle jaoks vastav väärtus. Samamoodi on EmployeeID, telefon ja osakond ülejäänud kolm võtit.

JSON Array

JSON-massiiv võib sisaldada mitmeid komadega eraldatud JSON-objekte. JSON -massiiv on suletud nurksulgudes. Vaatame JSON -massiivi näidet:

'Õpilased':[
{'eesnimi':'Sean', 'perekonnanimi':'Pruun'},
{'eesnimi':'Drake', 'perekonnanimi':'Williams'},
{'eesnimi':'Tom', 'perekonnanimi':'Miller'},
{eesnimi:Peeter,perekonnanimi:Johnson}
]

See on näide JSON -massiivist. Siin on õpilased suletud nurksulgudega, st massiiviga ja see sisaldab nelja JSON -i objekti. Kõik need objektid on esitatud võtme-väärtuse paaride kujul ja eraldatud komaga.

JSON -faili näidis

Nüüd, kui mõistsime JSON -i andmeid, JSON -objekte, JSON -massiivi, vaatame JSON -faili näidet:

{
eesnimi:Sean,
perekonnanimi:Pruun,
Õpilase ID: 21453,
Osakond:Arvuti Sc.,
Teemad:[Matemaatika,Phy,Chem]
}

Raamatukogude sõelumine C ++ keeles:

JSON -i andmete parsimisel C ++ pole natiivset lahendust. JSON -i andmete sõelumiseks C ++ on aga mitu raamatukogu. Selles artiklis uurime kahte kõige populaarsemat raamatukogu, et analüüsida JSON -i andmeid C ++ -is. Siin on GitHubi lingid JSON -i andmete analüüsimiseks:

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

Allpool toodud näidete täitmiseks võiksite need teegid alla laadida.

Näited

Nüüd on meil põhiteadmised JSONi andmetest, objektidest, massiividest ja saadaolevatest sõelumisteekidest. Vaatame nüüd paari näidet JSON -i andmete analüüsimiseks C ++ -is:

  • Näide-1: sõeluge JSON C ++ keeles
  • Näide-2: parsige ja järjestage JSON C ++ keeles
  • Näide-3: JSON-i sõelumine C ++ -is

Näite 1 ja näite 2 puhul kasutame nlohmanni raamatukogu. Näite-3 puhul kasutame teeki RapidJSON.

Näide-1: sõeluge JSON C ++ keeles

Selles näidisprogrammis demonstreerime, kuidas pääseda juurde C ++ JSON -andmete väärtustele.

#kaasake
#include 'json.hpp'

kasutades json=nlohmann::json;

intpeamine()
{

// jdTöötajad
json jdTöötajad=
{
{'eesnimi','Sean'},
{'perekonnanimi','Pruun'},
{'Õpilase ID',21453},
{'Osakond','Arvuti Sc.'}
};

// Juurdepääs väärtustele
tundi::stringfNimi=jdTöötajad.väärtus('eesnimi', 'oih');
tundi::stringlNimi=jdTöötajad.väärtus('perekonnanimi', 'oih');
intsID=jdTöötajad.väärtus('Õpilase ID', 0);
tundi::stringosakond=jdTöötajad.väärtus('Osakond', 'oih');

// Printige väärtused
tundi::maksma << 'Eesnimi: ' <<fNimi<<tundi::endl;
tundi::maksma << 'Perekonnanimi: ' <<lNimi<<tundi::endl;
tundi::maksma << 'Õpilase ID: ' <<sID<<tundi::endl;
tundi::maksma << 'Osakond:' <<osakond<<tundi::endl;

tagasi 0;
}

Näide-2: parsige ja järjestage JSON C ++ keeles

Selles näiteprogrammis vaatame, kuidas JSON -i sõeluda ja seeriaviisiliselt C ++ -is. Kasutame JSON -i andmete sõelumiseks json :: parse ().

#kaasake
#include 'json.hpp'
#kaasake

kasutades json=nlohmann::json;

intpeamine()
{
// Siin on JSON -i tekst
süsiteksti[] =R'(
{
'
Raamat': {
'
Laius': 450,
'
Kõrgus': 30,
'
Pealkiri':'Tere, Maailm',
'
isBiograafia': vale,
'
NumOfCopies': 4,
'
Raamatukogu ID -d': [2319, 1406, 3854, 987]
}
}
) '
;

// Analüüsime ja serialiseerime JSONi
json j_complete=json::sõeluda(teksti);
tundi::maksma <<tundi::setw(4) <<j_valmis<<tundi::endl;
}

Näide-3: JSON-i sõelumine C ++ -is

Nüüd demonstreerime, kuidas parsida JSON -stringi RapidJSON -i teegi abil. RapidJSON oli algselt inspireeritud RapidXML -ist. Selles näiteprogrammis parsime JSON -stringi DOM -i. Oleme deklareerinud dokumendi tüüpi mydoc ja seejärel kasutanud JSON -stringi sõelumiseks meetodit mydoc.parse ().

#kaasake
#include 'rapidjson/kirjanik.h'
#include 'rapidjson/document.h'
#include 'rapidjson/stringbuffer.h'

kasutades nimeruumi rapidjson;

intpeamine()
{

const süsi*json= '{'eesnimi':'Sean','perekonnanimi':'Pruun','empId': 21453,
'
osakond':'Arvuti Sc.'}';

// Parsige JSON -string DOM -i
Dokumendi mydoc;
mydoc.Sõeluda(json);

// DOM stringiks
StringBuffer puhver;
Kirjanik<StringBuffer>kirjanik(puhver);

mydoc.Nõustu(kirjanik);

// Väljundi printimine
tundi::maksma <<puhver.GetString() <<tundi::endl;

tagasi 0;
}

Järeldus

Selles artiklis oleme lühidalt arutanud JSON andmed, objekt, massiiv ja süntaks. Nagu me teame, pole C ++ -is JSON -i andmete parsimiseks natiivset lahendust; oleme kasutanud kahte erinevat raamatukogu JSON -i andmete parsimiseks C ++ -is. Uurisime kolme erinevat näidet, et näidata JSON -i andmete parsimismehhanismi C ++ -is. Võrreldes nlohmanni raamatukoguga on RapidJSON väike, kiire ja mälusõbralik.