Hoe JSON te ontleden in C++

How Parse Json C



De bedoeling van deze zelfstudie is om de JSON-gegevens te begrijpen en om JSON-gegevens in C++ te ontleden. We zullen JSON-gegevens, Object, Array, JSON-syntaxis bespreken en vervolgens verschillende werkvoorbeelden doornemen om het parseermechanisme van JSON-gegevens in C++ te begrijpen.

Wat is JSON?

JSON is een lichtgewicht op tekst gebaseerde weergave voor het op een georganiseerde manier opslaan en overbrengen van gestructureerde gegevens. De JSON-gegevens worden weergegeven in de vorm van geordende lijsten en sleutel-waardeparen. JSON staat voor J ava S cript OF bject N otatie. Zoals de volledige naam aangeeft, is het afgeleid van JavaScript. JSON-gegevens worden echter ondersteund in de meeste populaire programmeertalen.







Het wordt vaak gebruikt om de gegevens van de server naar een webpagina over te brengen. Het is veel eenvoudiger en schoner om de gestructureerde gegevens in JSON weer te geven dan XML.



JSON-syntaxisregel

Dit zijn de JSON-syntaxisregels:



  1. JSON-gegevens moeten altijd de vorm hebben van sleutel-waardeparen.
  2. JSON-gegevens worden gescheiden door komma's.
  3. Een accolade wordt gebruikt om het JSON-object weer te geven.
  4. Een vierkante haak wordt gebruikt om een ​​JSON-array weer te geven.

Wat zijn JSON-gegevens?

De JSON-gegevens worden weergegeven in de vorm van sleutel-waardeparen. Dit is vergelijkbaar met een woordenboek of hash in andere programmeertalen.





Naam: Drake

Dit is een voorbeeld van eenvoudige JSON-gegevens. De sleutel hier is Naam en Drake is de bijbehorende waarde. De sleutel, d.w.z. Naam en de waarde, d.w.z. Drake, worden gescheiden door een dubbele punt.



JSON-bestandsextensie

De JSON-gegevens worden normaal gesproken opgeslagen in het bestand met de extensie .json. Om bijvoorbeeld de gegevens van de werknemer op te slaan, kunt u het bestand eenvoudig 'employee.json' noemen. Dit zou een eenvoudig tekstbestand zijn. U kunt dit JSON-bestand vervolgens openen in een van uw favoriete teksteditors.

JSON-object

Het JSON-object is niets anders dan de JSON-gegevens tussen de accolades. Hier is een voorbeeld van een JSON-object:

{
Naam:Mannetjeseend,
Werknemer-ID:23547a,
Telefoon: 23547,
afdeling:Financiën
}

Een JSON-object kan meerdere JSON-gegevens bevatten. Elke JSON-gegevens worden gescheiden door een komma. JSON-gegevens worden weergegeven als sleutel-waardeparen. De sleutel, d.w.z. Naam en de waarde, d.w.z. Drake, worden gescheiden door een dubbele punt. In het bovenstaande voorbeeld zijn er vier sleutel-waardeparen. De eerste sleutel is Naam; Drake is de corresponderende waarde ervoor. Evenzo zijn EmployeeID, Phone en Department de andere drie sleutels.

JSON-array

Een JSON-array kan meerdere door komma's gescheiden JSON-objecten bevatten. De JSON-array staat tussen vierkante haakjes. Laten we eens kijken naar een voorbeeld van een JSON-array:

'Studenten':[
{'Voornaam':'Sean', 'achternaam':'Bruin'},
{'Voornaam':'Mannetjeseend', 'achternaam':'Willems'},
{'Voornaam':'Tom', 'achternaam':'Molenaar'},
{Voornaam:Peter,achternaam:Johnson}
]

Dit is een voorbeeld van een JSON-array. Hier wordt Students omsloten door een vierkante haak, d.w.z. array, en het bevat vier JSON-objecten. Elk van deze objecten wordt weergegeven in de vorm van sleutel-waardeparen en wordt gescheiden door een komma.

Een voorbeeld-JSON-bestand

Nu we JSON-gegevens, JSON-objecten en JSON-array hebben begrepen, laten we eens kijken naar een voorbeeld van een JSON-bestand:

{
Voornaam:Sean,
achternaam:bruin,
Student-ID: 21453,
afdeling:Computer Sc.,
Onderwerpen:[Wiskunde,Phy,Chemo]
}

Bibliotheken ontleden in C++:

Er is geen native oplossing voor het ontleden van JSON-gegevens in C++. Er zijn echter verschillende bibliotheken om JSON-gegevens in C++ te ontleden. In dit artikel gaan we kijken naar de twee populairste bibliotheken om JSON-gegevens in C++ te ontleden. Hier zijn de GitHub-links voor het parseren van JSON-gegevens:

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

Mogelijk wilt u deze bibliotheken downloaden om de onderstaande voorbeelden te kunnen uitvoeren.

Voorbeelden

Nu hebben we een basiskennis van JSON-gegevens, objecten, arrays en beschikbare parseerbibliotheken. Laten we nu een paar voorbeelden bekijken om JSON-gegevens in C++ te ontleden:

  • Voorbeeld-1: JSON ontleden in C++
  • Voorbeeld-2: ontleden en serialiseren JSON in C++
  • Voorbeeld-3: JSON ontleden in C++

Voor Voorbeeld-1 en Voorbeeld-2 gaan we gebruik maken van de nlohmann-bibliotheek. In het geval van Voorbeeld-3 gebruiken we de RapidJSON-bibliotheek.

Voorbeeld-1: JSON ontleden in C++

In dit voorbeeldprogramma laten we zien hoe u toegang krijgt tot waarden van JSON-gegevens in C++.

#erbij betrekken
#include 'json.hpp'

json gebruiken=nlohmann::json;

inthoofd()
{

// jdMedewerkers
json jdWerknemers=
{
{'Voornaam','Sean'},
{'achternaam','Bruin'},
{'Student-ID',21453},
{'Afdeling','Computersc.'}
};

// Toegang tot de waarden
uur::snaarfNaam=jdMedewerkers.waarde('Voornaam', 'oeps');
uur::snaarlNaam=jdMedewerkers.waarde('achternaam', 'oeps');
intsID=jdMedewerkers.waarde('Student-ID', 0);
uur::snaarafd=jdMedewerkers.waarde('Afdeling', 'oeps');

// Druk de waarden af
uur::kosten << 'Voornaam: ' <<fNaam<<uur::eindel;
uur::kosten << 'Achternaam: ' <<lNaam<<uur::eindel;
uur::kosten << 'Student-ID:' <<sID<<uur::eindel;
uur::kosten << 'Afdeling: ' <<afd<<uur::eindel;

opbrengst 0;
}

Voorbeeld-2: ontleden en serialiseren JSON in C++

In dit voorbeeldprogramma gaan we zien hoe JSON in C++ kan worden geparseerd en geserialiseerd. We gebruiken json::parse() om de JSON-gegevens te ontleden.

#erbij betrekken
#include 'json.hpp'
#erbij betrekken

json gebruiken=nlohmann::json;

inthoofd()
{
// Hier is een JSON-tekst
chartekst[] =R'(
{
'
Boek': {
'
Breedte': 450,
'
Hoogte': 30,
'
Titel':'Hallo Wereld',
'
isBiografie': vals,
'
Aantal exemplaren': 4,
'
Bibliotheek-ID's': [2319, 1406, 3854, 987]
}
}
) '
;

// Laten we JSON ontleden en serialiseren
json j_complete=json::ontleden(tekst);
uur::kosten <<uur::setw(4) <<j_complete<<uur::eindel;
}

Voorbeeld-3: JSON ontleden in C++

Nu laten we zien hoe u JSON-tekenreeksen kunt parseren met behulp van de RapidJSON-bibliotheek. RapidJSON is oorspronkelijk geïnspireerd op de RapidXML. In dit voorbeeldprogramma ontleden we een JSON-tekenreeks in DOM. We hebben mydoc van het type Document gedeclareerd en vervolgens de methode mydoc.parse() gebruikt om de JSON-tekenreeks te ontleden.

#erbij betrekken
#include 'rapidjson/writer.h'
#include 'rapidjson/document.h'
#include 'rapidjson/stringbuffer.h'

met behulp van naamruimte rapidjson;

inthoofd()
{

const char*json= '{'Voornaam':'Sean','achternaam':'bruin','empId': 21453,
'
afdeling':'Computer Sc.'}';

// Parseer de JSON-tekenreeks in DOM
Document mijndoc;
mijndoc.ontleden(json);

// DOM naar string
StringBuffer-buffer;
auteur<StringBuffer>auteur(buffer);

mijndoc.Aanvaarden(auteur);

// Print de uitvoer
uur::kosten <<buffer.GetString() <<uur::eindel;

opbrengst 0;
}

Conclusie

In dit artikel hebben we het kort besproken: JSON gegevens, object, array en syntaxis. Zoals we weten, is er geen native oplossing voor het ontleden van JSON-gegevens in C++; we hebben twee verschillende bibliotheken gebruikt om JSON-gegevens in C++ te ontleden. We hebben drie verschillende voorbeelden onderzocht om het JSON-gegevensparseermechanisme in C++ te demonstreren. In vergelijking met de nlohmann-bibliotheek is de RapidJSON klein, snel en geheugenvriendelijk.