Parser JSON

0

Witam szukam parsera JSON który odkoduje polskie znaki zapisane w unicode (/u0142.. itp) . Znalazłem parę parserów w internecie z obsługa unicode ale ale nie zamieniają one właśnie polskich znaków. Moglibyście coś polecić?

0

Jeśli to
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
nie działa to masz coś nie tak gdzie indziej.

0

Ale potrzebuje ten parser w c++ . Dopiero zaczynam swoją przygode z JSON i nie garniam go za bardzo.

Chyba ze coś źle odkodowuje tego stringa z JSON'em

    ifstream czytaj("curl.txt");
    string s;
    while(getline(czytaj,q)) 
	text=text + s;


	books = json::parse_string(cos);
	string k=books[0]["produkt"].as<string>();
	cout<<"\n\t"<<"ł\t"<<k<<endl<<endl;; 

i na wyjściu wychodzi takie coś:
http://scr.hu/2aps/60gn2

1

Stawiałbym raczej na to, że masz ustawioną złą stronę kodową w konsoli :P

0

jak zmienię lokalizacje na polską to w tedy wychodzi takie coś :P

http://scr.hu/2aps/3guqo

Jak widać " ł " po lewej stronie wyświetla się normalnie za to to " ł " odkodowane wygląda całkiem inaczej.

0

QtJson wydaje się sobie radzić:

	QByteArray s = R"({ "foo": "zażółć gęślą ja\u017A\u0144" })";

	QJsonDocument j = QJsonDocument::fromJson(s);

	auto str = j.object().value("foo").toString();

	cout << "str size: " << str.size() << endl;

	for(QChar c : str){
		cout << "0x" << setw(4) << hex << uppercase << setfill('0') << c.unicode();
		if(c.toLatin1()){
			cout << setfill(' ') << " -> " << c.toLatin1() << endl;
		}else{
			cout << endl;
		}
	}

Powinno dać taki wynik

str size: 17
0x7A00 -> z
0x6100 -> a
0x17C0
0xF300 -> ˇ
0x1420
0x1070
0x2000 ->
0x6700 -> g
0x1190
0x15B0
0x6C00 -> l
0x1050
0x2000 ->
0x6A00 -> j
0x6100 -> a
0x17A0
0x1440
0

Czy jeśli użyję QT do małego programu to nie będzie przesada? :P Nigdy jej nie używałem także wolę się najpierw zapytać :)

0

Jak jesteś na linuksie to na pewno nie. Jak na windowsie, to będzie lekki overkill, bo każda program będzie wymagał ~25mb bibliotek do wystartowania, ale nie przejmowałbym się tym aż tak.

0

Próbwałeś facebookowego folly? Stworzyli coś takiego jak dynamic https://github.com/facebook/folly/blob/master/folly/docs/Dynamic.md - główną motywacją do tego było właśnie parsowanie JSONa w C++. To krótkie overview powinno wszystko wyjaśnić.
Nie sprawdzałam samodzielnie czy radzi sobie z polskimi znakami, ale jestem tego prawie pewna.
No i folly generalnie ma wiele przydatnych funkcji (folly::to, make_unique, StringPiece itd.) które świetnie działają z C++11 i ogólnie bardzo usprawniają pisanie kodu w C++ ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1