Jak parsować JSON w C++

How Parse Json C



Intencją tego samouczka jest zrozumienie danych JSON i sposobu analizowania danych JSON w C++. Omówimy dane JSON, obiekt, tablicę, składnię JSON, a następnie przejdziemy przez kilka działających przykładów, aby zrozumieć mechanizm parsowania danych JSON w C++.

Co to jest JSON?

JSON to lekka reprezentacja tekstowa do przechowywania i przesyłania uporządkowanych danych w zorganizowany sposób. Dane JSON są reprezentowane w postaci uporządkowanych list i par klucz-wartość. JSON oznacza J ava S krypto LUB obiekt n rotacja. Jak wskazuje pełna nazwa, wywodzi się z JavaScript. Jednak dane JSON są obsługiwane w większości popularnych języków programowania.







Często służy do przesyłania danych z serwera na stronę internetową. Znacznie łatwiej i czyściej jest reprezentować uporządkowane dane w formacie JSON niż XML.



Reguła składni JSON

Oto zasady składni JSON:



  1. Dane JSON powinny zawsze mieć postać par klucz-wartość.
  2. Dane JSON są oddzielone przecinkami.
  3. Nawias klamrowy jest używany do reprezentowania obiektu JSON.
  4. Nawias kwadratowy służy do reprezentowania tablicy JSON.

Co to są dane JSON?

Dane JSON są reprezentowane w postaci par klucz-wartość. Jest to podobne do słownika lub skrótu w innych językach programowania.





Imię: Drake

To jest przykład prostych danych JSON. Kluczem tutaj jest nazwa, a Drake jest odpowiednią wartością. Klucz, tj. Nazwa i wartość, tj. Drake, są oddzielone dwukropkiem.



Rozszerzenie pliku JSON

Dane JSON są zwykle przechowywane w pliku z rozszerzeniem .json. Na przykład, aby przechowywać dane pracownika, możesz po prostu nazwać plik „employee.json”. Byłby to prosty plik tekstowy. Następnie możesz otworzyć ten plik JSON w dowolnym ulubionym edytorze tekstu.

Obiekt JSON

Obiekt JSON to nic innego jak dane JSON zawarte w nawiasach klamrowych. Oto przykładowy obiekt JSON:

{
Nazwa:Kaczor,
numer identyfikacyjny pracownika:23547a,
Telefon: 23547,
dział:Finanse
}

Obiekt JSON może zawierać wiele danych JSON. Każde dane JSON są oddzielone przecinkiem. Dane JSON są reprezentowane jako pary klucz-wartość. Klucz, tj. Nazwa i wartość, tj. Drake, są oddzielone dwukropkiem. W powyższym przykładzie występują cztery pary klucz-wartość. Pierwszym kluczem jest nazwa; Drake jest dla niego odpowiednią wartością. Podobnie, EmployeeID, Phone i Department to pozostałe trzy klucze.

Tablica JSON

Tablica JSON może zawierać kilka obiektów JSON oddzielonych przecinkami. Tablica JSON jest ujęta w nawias kwadratowy. Spójrzmy na przykład tablicy JSON:

„Uczniowie”:[
{'Imię':„Sean”, 'nazwisko':'Brązowy'},
{'Imię':'Kaczor', 'nazwisko':„Williams”},
{'Imię':'Tomek', 'nazwisko':'Młynarz'},
{Imię:Piotr,nazwisko:Johnson}
]

To jest przykład tablicy JSON. Tutaj Students jest ujęty w nawias kwadratowy, tj. Tablica, i zawiera cztery obiekty JSON. Każdy z tych obiektów jest reprezentowany w postaci par klucz-wartość i jest oddzielony przecinkiem.

Przykładowy plik JSON

Teraz, ponieważ zrozumieliśmy dane JSON, obiekty JSON, tablicę JSON, spójrzmy na przykład pliku JSON:

{
Imię:Sean,
nazwisko:brązowy,
legitymacja studencka: 21453,
dział:Komputer Sc.,
Tematy:[Matematyka,Phy,Chemia]
}

Parsowanie bibliotek w C++:

Nie ma natywnego rozwiązania do analizowania danych JSON w C++. Istnieje jednak kilka bibliotek do analizowania danych JSON w C++. W tym artykule przyjrzymy się dwóm najpopularniejszym bibliotekom do analizowania danych JSON w C++. Oto linki GitHub do analizowania danych JSON:

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

Możesz pobrać te biblioteki, aby móc wykonać poniższe przykłady.

Przykłady

Teraz mamy podstawową wiedzę na temat danych JSON, obiektów, tablic i dostępnych bibliotek analizujących. Przyjrzyjmy się teraz kilku przykładom analizowania danych JSON w C++:

  • Przykład-1: Parsowanie JSON w C++
  • Przykład-2: Parsowanie i serializacja JSON w C++
  • Przykład-3: Parsowanie JSON w C++

W przypadku Przykładu-1 i Przykładu-2 użyjemy biblioteki nlohmann. W przypadku Przykładu-3 użyjemy biblioteki RapidJSON.

Przykład-1: Parsowanie JSON w C++

W tym przykładowym programie pokażemy, jak uzyskać dostęp do wartości danych JSON w C++.

#włączać
#dołącz „json.hpp”

za pomocą json=nlohmann::json;

intGłówny()
{

// jdPracownicy
json jdEmployees=
{
{'Imię',„Sean”},
{'nazwisko','Brązowy'},
{'Legitymacja studencka',21453},
{'Dział',„Komputer Sc.”}
};

// Uzyskaj dostęp do wartości
godziny::strunowyfNazwa=jdPracownicy.wartość('Imię', „ups”);
godziny::strunowylNazwa=jdPracownicy.wartość('nazwisko', „ups”);
intidentyfikator sID=jdPracownicy.wartość('Legitymacja studencka', 0);
godziny::strunowy=jdPracownicy.wartość('Dział', „ups”);

// Wydrukuj wartości
godziny::koszt << 'Imię: ' <<fNazwa<<godziny::koniec;
godziny::koszt << 'Nazwisko: ' <<lNazwa<<godziny::koniec;
godziny::koszt << 'Legitymacja studencka: ' <<identyfikator sID<<godziny::koniec;
godziny::koszt << 'Dział: ' <<<<godziny::koniec;

powrót 0;
}

Przykład-2: Parsowanie i serializacja JSON w C++

W tym przykładowym programie zobaczymy, jak parsować i serializować JSON w C++. Używamy json::parse() do analizowania danych JSON.

#włączać
#dołącz „json.hpp”
#włączać

za pomocą json=nlohmann::json;

intGłówny()
{
// Oto tekst JSON
zwęglaćtekst[] =r'(
{
'
Książka': {
'
Szerokość': 450,
'
Wzrost': 30,
'
Tytuł':'Witaj świecie„,
'
isBiografia': fałszywe,
'
Liczba kopii': 4,
'
Identyfikatory bibliotek': [2319, 1406, 3854, 987]
}
}
) '
;

// Przeanalizujmy i zserializujmy JSON
json j_complete=json::analizować(tekst);
godziny::koszt <<godziny::setw(4) <<j_kompletne<<godziny::koniec;
}

Przykład-3: Parsowanie JSON w C++

Teraz zademonstrujemy, jak parsować ciąg JSON za pomocą biblioteki RapidJSON. RapidJSON został pierwotnie zainspirowany RapidXML. W tym przykładowym programie przetwarzamy ciąg JSON w DOM. Zadeklarowaliśmy mydoc typu Document, a następnie za pomocą metody mydoc.parse() przeanalizowaliśmy ciąg JSON.

#włączać
#dołącz „rapidjson/writer.h”
#dołącz „rapidjson/document.h”
#include 'rapidjson/stringbuffer.h'

używanie przestrzeni nazw rapidjson;

intGłówny()
{

stały zwęglać*json= '{'Imię':'Sean','nazwisko':'brązowy','empId': 21453,
'
dział':'Komputer Sc.'}';

// Przeanalizuj ciąg JSON w DOM
Dokument mój dokument;
mójdok.Analizować(json);

// DOM do ciągu
Bufor StringBuffer;
Pisarz<Bufor ciągów>pisarz(bufor);

mójdok.Zaakceptować(pisarz);

// Wydrukuj dane wyjściowe
godziny::koszt <<bufor.Pobierz ciąg() <<godziny::koniec;

powrót 0;
}

Wniosek

W tym artykule krótko omówiliśmy JSON dane, obiekt, tablica i składnia. Jak wiemy, nie ma natywnego rozwiązania do parsowania danych JSON w C++; użyliśmy dwóch różnych bibliotek do analizowania danych JSON w C++. Przyjrzeliśmy się trzem różnym przykładom, aby zademonstrować mechanizm analizowania danych JSON w C++. W porównaniu do biblioteki nlohmann, RapidJSON jest mały, szybki i przyjazny dla pamięci.