A JSON elemzése a C ++ nyelven

How Parse Json C



Ennek az oktatóanyagnak az a célja, hogy megértse a JSON -adatokat és a JSON -adatok C ++ nyelven történő elemzését. Megvitatjuk a JSON -adatokat, az objektumokat, tömböket, a JSON -szintaxist, majd számos működő példán keresztül áttekintjük a JSON -adatok elemzési mechanizmusát a C ++ nyelven.

Mi az a JSON?

JSON egy könnyű, szöveges alapú ábrázolás strukturált adatok szervezett tárolására és továbbítására. A JSON-adatok rendezett listák és kulcs-érték párok formájában jelennek meg. A JSON jelentése J ava S kripta VAGY bject N otáció. Ahogy a teljes név is jelzi, a JavaScriptből származik. A JSON adatokat azonban a legtöbb népszerű programozási nyelv támogatja.







Gyakran használják az adatok átvitelére a szerverről egy weboldalra. Sokkal egyszerűbb és tisztább a strukturált adatok megjelenítése a JSON -ban, mint az XML -ben.



JSON szintaktikai szabály

Íme a JSON szintaxis szabályai:



  1. A JSON adatoknak mindig kulcs-érték párok formájában kell lenniük.
  2. A JSON adatok vesszővel vannak elválasztva.
  3. Göndör zárójelet használnak a JSON objektum ábrázolására.
  4. A szögletes zárójelet a JSON tömb ábrázolására használják.

Mi a JSON Data?

A JSON adatok kulcs-érték párok formájában jelennek meg. Ez hasonló a szótárhoz vagy a hash -hez más programozási nyelveken.





Név: Drake

Ez egy példa az egyszerű JSON adatokra. A kulcs itt a Név, a Drake pedig a megfelelő érték. A kulcsot, azaz a nevet és az értéket, azaz Drake -t kettőspont választja el.



JSON fájlkiterjesztés

A JSON adatokat általában a .json kiterjesztéssel tárolja a fájl. Például a munkavállaló adatainak tárolásához egyszerűen nevezze el a fájlt „alkalmazott.json” névvel. Ez egy egyszerű szöveges fájl lenne. Ezt követően megnyithatja ezt a JSON fájlt bármelyik kedvenc szövegszerkesztőjében.

JSON objektum

A JSON objektum nem más, mint a göndör zárójelek közé zárt JSON -adatok. Itt van egy minta JSON objektum:

{
Név:Gácsér,
munkavállalói azonosító:23547a,
Telefon: 23547,
Osztály:Pénzügy
}

Egy JSON objektum több JSON adatot is tartalmazhat. Minden JSON -adatot vessző választ el. A JSON adatok kulcs-érték párokként jelennek meg. A kulcsot, azaz a nevet és az értéket, azaz Drake -t kettőspont választja el. A fenti példában négy kulcs-érték pár szerepel. Az első kulcs a Név; Drake a megfelelő érték. Hasonlóképpen az EmployeeID, a Phone és a Department a másik három kulcs.

JSON tömb

Egy JSON tömb több vesszővel elválasztott JSON objektumot tartalmazhat. A JSON tömb szögletes zárójelben található. Nézzünk egy példát a JSON tömbre:

'Diákok':[
{'keresztnév':'Sean', 'vezetéknév':'Barna'},
{'keresztnév':'Gácsér', 'vezetéknév':'Williams'},
{'keresztnév':'Tom', 'vezetéknév':'Molnár'},
{keresztnév:Péter,vezetéknév:Johnson}
]

Ez egy példa a JSON tömbre. Itt a diákok szögletes zárójelben, azaz tömbben vannak, és négy JSON objektumot tartalmaz. Ezen objektumok mindegyike kulcs-érték párok formájában van ábrázolva, és vesszővel van elválasztva.

Minta JSON fájl

Most, hogy megértettük a JSON adatokat, JSON objektumokat, JSON tömböt, nézzünk egy példát a JSON fájlra:

{
keresztnév:Sean,
vezetéknév:Barna,
Diákigazolvány: 21453,
Osztály:Számítógép Sc.,
Tantárgyak:[Math,Phy,Chem]
}

Könyvtárak elemzése C ++ nyelven:

Nincs natív megoldás a JSON adatok C ++ nyelvű elemzésére. Számos könyvtár létezik azonban a JSON -adatok C ++ - ban történő elemzésére. Ebben a cikkben megvizsgáljuk a két legnépszerűbb könyvtárat a JSON adatok C ++ nyelvű elemzéséhez. Itt vannak a GitHub linkek a JSON adatok elemzéséhez:

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

Érdemes letölteni ezeket a könyvtárakat, hogy végre tudja hajtani az alábbi példákat.

Példák

Most alapvető ismeretekkel rendelkezünk a JSON adatokról, objektumokról, tömbökről és a rendelkezésre álló elemző könyvtárakról. Nézzünk most néhány példát a JSON adatok C ++ nyelvű elemzésére:

  • 1. példa: JSON elemzése C ++ nyelven
  • 2. példa: JSON elemzése és sorosítása C ++ nyelven
  • 3. példa: JSON elemzése C ++ nyelven

Az 1. és a 2. példa esetében az nlohmann könyvtárat fogjuk használni. A 3. példa esetében a RapidJSON könyvtárat fogjuk használni.

1. példa: JSON elemzése C ++ nyelven

Ebben a példaprogramban bemutatjuk, hogyan lehet elérni a JSON adatok értékeit C ++ nyelven.

#befoglalni
#include 'json.hpp'

json használatával=nlohmann::json;

intfő-()
{

// jdMunkavállalók
json jdMunkavállalók=
{
{'keresztnév','Sean'},
{'vezetéknév','Barna'},
{'Diákigazolvány',21453},
{'Osztály','Computer Sc.'}
};

// Hozzáférés az értékekhez
órák::húrfName=jdMunkavállalók.érték('keresztnév', 'hoppá');
órák::húrlName=jdMunkavállalók.érték('vezetéknév', 'hoppá');
intsID=jdMunkavállalók.érték('Diákigazolvány', 0);
órák::húradósság=jdMunkavállalók.érték('Osztály', 'hoppá');

// Nyomtassa ki az értékeket
órák::költség << 'Keresztnév: ' <<fName<<órák::endl;
órák::költség << 'Vezetéknév: ' <<lName<<órák::endl;
órák::költség << 'Diákigazolvány: ' <<sID<<órák::endl;
órák::költség << 'Osztály:' <<adósság<<órák::endl;

Visszatérés 0;
}

2. példa: JSON elemzése és sorosítása C ++ nyelven

Ebben a példaprogramban látni fogjuk, hogyan elemezzük és szerializáljuk a JSON -t C ++ nyelven. A json :: parse () függvényt használjuk a JSON adatok elemzéséhez.

#befoglalni
#include 'json.hpp'
#befoglalni

json használatával=nlohmann::json;

intfő-()
{
// Itt egy JSON szöveg
charszöveg[] =R'(
{
'
Könyv': {
'
Szélesség': 450,
'
Magasság': 30,
'
Cím':'Helló Világ',
'
isBiography': hamis,
'
NumOfCopies': 4,
'
LibraryID -k': [2319, 1406, 3854, 987]
}
}
) ''
;

// Elemezzük és sorosítjuk a JSON -t
json j_complete=json::elemezni(szöveg);
órák::költség <<órák::setw(4) <<j_komplett<<órák::endl;
}

3. példa: JSON elemzése C ++ nyelven

Most bemutatjuk, hogyan elemezzük a JSON karakterláncot a RapidJSON könyvtár használatával. A RapidJSON -t eredetileg a RapidXML ihlette. Ebben a példaprogramban egy JSON karakterláncot elemezünk a DOM -ba. A Document típusú mydoc -t deklaráltuk, majd a mydoc.parse () metódussal elemeztük a JSON karakterláncot.

#befoglalni
#include 'rapidjson/write.h'
#include 'rapidjson/document.h'
#include 'rapidjson/stringbuffer.h'

rapidjson névtér használatával;

intfő-()
{

const char*json= '{'keresztnév':'Sean','vezetéknév':'Barna','empId': 21453,
'
osztály':'Számítógép Sc.'}';

// A JSON karakterlánc elemzése DOM -ba
Dokumentálja a mydoc -t;
mydoc.Elemzés(json);

// DOM karakterláncra
StringBuffer puffer;
Író<StringBuffer>író(puffer);

mydoc.Elfogad(író);

// A kimenet kinyomtatása
órák::költség <<puffer.GetString() <<órák::endl;

Visszatérés 0;
}

Következtetés

Ebben a cikkben röviden tárgyaltunk JSON adatok, objektumok, tömbök és szintaxisok. Mint tudjuk, nincs natív megoldás a JSON -adatok elemzésére a C ++ nyelven; két különböző könyvtárat használtunk a JSON adatok C ++ nyelvű elemzésére. Három különböző példát vizsgáltunk, hogy bemutassuk a JSON adatok elemzési mechanizmusát C ++ nyelven. A nlohmann könyvtárhoz képest a RapidJSON kicsi, gyors és memóriabarát.