Bilindiği gibi JSON (JavaScript Object Notation) javascript uygulamaları için yapılmış bir tür veri formatıdır. RapidJSON kütüphanesi, c++ için yapılmış yüksek hızlı ve performanslı bir JSON kütüphanesidir. Github ve Dökümanlara tıklayarak ulaşabilirsiniz.Yazımızda VS 2017 için bu kütüphanenin kurulumu ve örnek bir proje yer alacaktır.

 

Diğer kütüphanelerle karşılaştırmalı benchmarklara aşağıdaki linklerden ulaşabilirsiniz:

https://github.com/miloyip/nativejson-benchmark

https://github.com/mloskot/json_benchmark

https://chadaustin.me/2013/01/json-parser-benchmarking/

 

1- Kurulum:

  • Öncelikle kurulum için Vcpkg aracını kullanacağız. ( Vcpkg kurulu değilse burdaki yazıdan kurulum işlemlerine ulaşabilirsiniz ). Yönetici olarak CMD’mizi başlatın, vcpkg’nin olduğu klasöre CD komutuyla gidin ve alttaki kodu girin:

 

vcpkg install rapidjson:x64-windows

 

  • 64 bit için yapılmış olan kütüphaneyi kullanacağım için :x64-windows komutunu kullandım. Komutu girdikten sonra kütüphaneleri ve bağımlılıkları otomatik olarak indirip işlemleri yapacaktır. İşlemlerin bitmesini bekleyin.

 

2- Örnek Proje:

  • İşlemler bittikten sonra Visual Studio’da yeni bir Console Application projesi açın.
  • Yukardan x64 seçin.
  • Ve alttaki kodları girip örnek projemizi çalıştıralım.

 

#include "stdafx.h"
#include <iostream>
#include <string>

#define RAPIDJSON_NOMEMBERITERATORCLASS
#define RAPIDJSON_HAS_STDSTRING 1

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/prettywriter.h"

using namespace std;
using namespace rapidjson;

void stringtenJSON()
{
	//Yazimiz
	string stringdegiskeni = "test yazisi";

	//Dokuman olustur
	Document d;
	d.SetObject();
	Document::AllocatorType& allocator = d.GetAllocator();

	//String degeri olustur
	Value s;
	s.SetString(StringRef(stringdegiskeni));

	//string degerini iceren yazi ogesini ekle
	d.AddMember("veri", s, allocator);

	//jsonu stringe cevirme islemi (cout'tan okumammiz icin)
	StringBuffer sb;
	PrettyWriter<StringBuffer> writer(sb);
	d.Accept(writer);

	// (GetString) stringbufferi stringe cevirme icin
	cout << sb.GetString() << endl;
}

void JSONokuma()
{
	//JSON verimiz
	string message = "{\"sayi\":1}";

	//Dokuman olustur
	Document d;
	
	//JSON kodunu ayristir (const chara donusturerek (c_str))
	d.Parse(message.c_str());

	//JSON verisi dogrulama
	if (d.IsObject()) {

		//sayi adli veri varmi
		if (d.HasMember("sayi")) {

			//Deger olustur (referansi performans acisindan kullandik)
			Value& s = d["sayi"];

			//sayi verisinin degeri gercekten sayimi oldugunu dogrulama
			if (s.IsInt()) {

				//sayiya + 1 eklettirdik
				s.SetInt(s.GetInt() + 1);

				// Stringify
				StringBuffer buffer;
				Writer<StringBuffer> writer(buffer);

				d.Accept(writer);

				// (GetString) stringbufferi stringe cevirme icin
				cout << buffer.GetString() << endl;

			}
		}
	}
}

int main()
{

	cout << "stringtenJSON fonksiyonu:" << endl;

	stringtenJSON();

	cout << endl;

	cout << "JSONokuma fonksiyonu:" << endl;

	JSONokuma();

	system("pause");

    return 0;
}

 

Compile ettiğimizde sonuç şu şekilde gözükecektir:

 

 

 

Kolay gelsin…