C++'da JSON nasıl ayrıştırılır

How Parse Json C



Bu öğreticinin amacı, JSON verilerini ve JSON verilerinin C++'da nasıl ayrıştırılacağını anlamaktır. JSON verilerini, Object, Array, JSON sözdizimini tartışacağız ve ardından C++'da JSON verilerinin ayrıştırma mekanizmasını anlamak için birkaç çalışma örneğini gözden geçireceğiz.

JSON nedir?

JSON yapılandırılmış verileri organize bir şekilde depolamak ve aktarmak için hafif metin tabanlı bir temsildir. JSON verileri, sıralı listeler ve anahtar/değer çiftleri biçiminde temsil edilir. JSON şu anlama gelir: J ava S şifre VEYA nesne n otasyon. Tam adından da anlaşılacağı gibi, JavaScript'ten türetilmiştir. Ancak JSON verileri, popüler programlama dillerinin çoğunda desteklenir.







Genellikle verileri sunucudan bir web sayfasına aktarmak için kullanılır. JSON'da yapılandırılmış verileri temsil etmek XML'den çok daha kolay ve temizdir.



JSON Sözdizimi Kuralı

İşte JSON sözdizimi kuralları:



  1. JSON Verileri her zaman anahtar/değer çiftleri biçiminde olmalıdır.
  2. JSON Verileri virgülle ayrılır.
  3. JSON Nesnesini temsil etmek için bir küme ayracı kullanılır.
  4. JSON Dizisini temsil etmek için köşeli parantez kullanılır.

JSON Verisi nedir?

JSON verileri, anahtar/değer çiftleri biçiminde temsil edilir. Bu, diğer programlama dillerindeki bir sözlüğe veya karmaya benzer.





İsim : Drake

Bu, basit JSON verilerine bir örnektir. Buradaki anahtar Name ve Drake karşılık gelen değerdir. Anahtar, yani Ad ve değer, yani Drake iki nokta üst üste ile ayrılır.



JSON Dosya Uzantısı

JSON verileri normalde .json uzantılı dosyada saklanır. Örneğin, çalışanın verilerini depolamak için dosyayı 'employee.json' olarak adlandırmanız yeterlidir. Bu basit bir metin dosyası olacaktır. Daha sonra bu JSON dosyasını favori metin düzenleyicilerinizden herhangi birinde açabilirsiniz.

JSON Nesnesi

JSON nesnesi, küme parantezleri içine alınmış JSON verilerinden başka bir şey değildir. İşte örnek bir JSON nesnesi:

{
İsim:Ejderha,
Çalışan kimliği:23547a,
Telefon: 23547,
departman:finans
}

Bir JSON nesnesi, birden çok JSON verisi içerebilir. Her JSON verisi virgülle ayrılır. JSON verileri, anahtar/değer çiftleri olarak temsil edilir. Anahtar, yani Ad ve değer, yani Drake iki nokta üst üste ile ayrılır. Yukarıdaki örnekte, dört anahtar/değer çifti vardır. İlk anahtar Ad'dır; Drake buna karşılık gelen değerdir. Benzer şekilde, Çalışan Kimliği, Telefon ve Departman diğer üç anahtardır.

JSON Dizisi

Bir JSON dizisi, virgülle ayrılmış birkaç JSON nesnesi içerebilir. JSON dizisi köşeli parantez içine alınır. Bir JSON dizisi örneğine bakalım:

'Öğrenciler':[
{'ilk adı':'Sean', 'Soyadı':'Kahverengi'},
{'ilk adı':'Drake', 'Soyadı':'Williams'},
{'ilk adı':'Tom', 'Soyadı':'Miller'},
{ilk adı:Peter,Soyadı:Johnson}
]

Bu bir JSON dizisi örneğidir. Burada, Öğrenciler bir köşeli parantez, yani dizi içine alınır ve dört JSON nesnesi içerir. Bu nesnelerin her biri, anahtar/değer çiftleri biçiminde temsil edilir ve virgülle ayrılır.

Örnek JSON Dosyası

Şimdi JSON verilerini, JSON nesnelerini, JSON dizisini anladığımıza göre, bir JSON dosyası örneğine bakalım:

{
ilk adı:Sean,
Soyadı:Kahverengi,
Öğrenci Kimliği: 21453,
departman:Bilgisayar Sk.,
konular:[Matematik,Phy,kimyasal]
}

C++'da Kitaplıkları Ayrıştırma:

JSON verilerini C++'da ayrıştırmak için yerel bir çözüm yoktur. Ancak, C++'da JSON verilerini ayrıştırmak için birkaç kitaplık vardır. Bu yazıda, C++'da JSON verilerini ayrıştırmak için en popüler iki kütüphaneyi inceleyeceğiz. JSON verilerini ayrıştırmak için GitHub bağlantıları:

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

Aşağıda gösterilen örnekleri çalıştırabilmek için bu kitaplıkları indirmek isteyebilirsiniz.

Örnekler

Artık JSON verileri, nesneler, diziler ve kullanılabilir ayrıştırma kitaplıkları hakkında temel bilgilere sahibiz. Şimdi JSON verilerini C++'da ayrıştırmak için birkaç örneğe bakalım:

  • Örnek-1: JSON'u C++ ile ayrıştırın
  • Örnek-2: JSON'u C++'da Ayrıştırma ve Serileştirme
  • Örnek-3: JSON'u C++ ile ayrıştırın

Örnek-1 ve Örnek-2 için nlohmann kütüphanesini kullanacağız. Örnek-3 durumunda RapidJSON kitaplığını kullanacağız.

Örnek-1: JSON'u C++ ile ayrıştırın

Bu örnek programda, C++'da JSON verilerinin değerlerine nasıl erişileceğini göstereceğiz.

#Dahil etmek
#'json.hpp'yi dahil et

json kullanmak=nlohmann::json;

intana()
{

// jdÇalışanlar
json jdÇalışanlar=
{
{'ilk adı','Sean'},
{'Soyadı','Kahverengi'},
{'Öğrenci Kimliği',21453},
{'Departman','Bilgisayar Sk.'}
};

// Değerlere erişin
saat::sicimfAd=jdÇalışanlar.değer('ilk adı', 'ayy');
saat::sicimlAd=jdÇalışanlar.değer('Soyadı', 'ayy');
intkimlik=jdÇalışanlar.değer('Öğrenci Kimliği', 0);
saat::sicimborç=jdÇalışanlar.değer('Departman', 'ayy');

// Değerleri yazdır
saat::maliyet << 'İlk adı: ' <<fAd<<saat::son;
saat::maliyet << 'Soy isim: ' <<lAd<<saat::son;
saat::maliyet << 'Öğrenci Kimliği: ' <<kimlik<<saat::son;
saat::maliyet << 'Departman: ' <<borç<<saat::son;

dönüş 0;
}

Örnek-2: JSON'u C++'da Ayrıştırma ve Serileştirme

Bu örnek programda, C++'da JSON'un nasıl ayrıştırılıp seri hale getirileceğini göreceğiz. JSON verilerini ayrıştırmak için json::parse() kullanıyoruz.

#Dahil etmek
#'json.hpp'yi dahil et
#Dahil etmek

json kullanmak=nlohmann::json;

intana()
{
// İşte bir JSON metni
karakterMetin[] =r'(
{
'
Kitap': {
'
Genişlik': 450,
'
Boy uzunluğu': 30,
'
Başlık':'Selam Dünya',
'
Biyografi': YANLIŞ,
'
Kopya Sayısı': 4,
'
Kitaplık Kimlikleri': [2319, 1406, 3854, 987]
}
}
)'
;

// JSON'u ayrıştırıp seri hale getirelim
json j_complete=json::ayrıştırmak(Metin);
saat::maliyet <<saat::ayarlamak(4) <<j_complete<<saat::son;
}

Örnek-3: JSON'u C++ ile ayrıştırın

Şimdi, RapidJSON kitaplığını kullanarak JSON dizesinin nasıl ayrıştırılacağını göstereceğiz. RapidJSON, orijinal olarak RapidXML'den esinlenmiştir. Bu örnek programda, bir JSON dizesini DOM'a ayrıştırıyoruz. Document türünde mydoc ilan ettik ve ardından JSON dizesini ayrıştırmak için mydoc.parse() yöntemini kullandık.

#Dahil etmek
#include 'rapidjson/writer.h'
#include 'rapidjson/document.h'
#include 'rapidjson/stringbuffer.h'

ad alanı rapidjson kullanarak;

intana()
{

const karakter*json= '{'ilk adı':'Sean','Soyadı':'Kahverengi','emId': 21453,
'
departman':'Bilgisayar Sk.'}';

// JSON dizesini DOM'a ayrıştırın
Belge mydoc;
doktorum.Ayrıştırma(json);

// DOM'den dizeye
StringBuffer arabelleği;
yazar<StringBuffer>yazar(tampon);

doktorum.Kabul etmek(yazar);

// Çıktıyı yazdır
saat::maliyet <<tampon.GetString() <<saat::son;

dönüş 0;
}

Çözüm

Bu yazımızda kısaca bahsettik JSON veri, nesne, dizi ve sözdizimi. Bildiğimiz gibi, C++'da JSON verilerinin ayrıştırılması için yerel bir çözüm yoktur; JSON verilerini C++'da ayrıştırmak için iki farklı kitaplık kullandık. C++'da JSON veri ayrıştırma mekanizmasını göstermek için üç farklı örneğe baktık. nlohmann kitaplığına kıyasla, RapidJSON küçük, hızlı ve hafıza dostudur.