4

Вычитал из этой статьи, что есть парсер JSON. Удобный парсер, но при вводе значений на русском языке выводится ошибка.

Возникло необработанное исключение по адресу 0x753BB760

Вот пример кода:

nlohmann::json response_json;
auto response_json = nlohmann::json::parse("{ \"Пример\": [\"Нуль\"] }");

Вот этот код рабочий:

nlohmann::json response_json;
auto response_json = nlohmann::json::parse("{ \"Value\": [\"NULL\"] }");

Никто не в курсе как изменить данную ситуацию? Поправить может что-то, чтобы оно работало.

αλεχολυτ
  • 28,987
  • 13
  • 60
  • 119
Dolphin Scrub
  • 119
  • 3
  • 8

1 Answers1

1

Убедитесь, что сохраняете файл с исходным кодом в кодировке UTF-8. Или настройте компилятор подходящим образом. Вероятно, самым простым способом будет просто указать префикс u8 перед строкой с JSON.

N.B.: Ваша библиотека поддерживает только эту кодировку.

P.S.: Возможно, вам будет удобно использовать сырые С++ строки. Подробнее можно прочитать, например, на MSDN.

Ваш пример у меня отлично работает:

using namespace nlohmann;
json ex = json::parse(u8R"({ "Пример": [ "Нуль" ] })");
for (json::iterator it = ex.begin(); it != ex.end(); ++it) {
    std::cout << it.key() << ": " << it.value() << "\n";
}
mymedia
  • 8,602
  • Плюс за u8R"(. Работает ли cout << ex; или for (auto&& p : ex) cout << p << "\n"; или for (auto&& p : ex) cout << p.key() << " " << p.value() << "\n";? 2- сам исходник при этом нужно сохранять в ожидаемой компилятором кодировке (не обязательно utf-8). Я представляю это как: компилятор байты из файла с исходным кодом декодирует в Unicode, используя эту кодировку, затем компилятор кодирует Unicode назад в байты, используя utf-8, благодаря u8"", таким образом парсер при исполнении увидит байты, представляющие текст в utf-8 кодир(чтобы голова не болела, можно везде utf-8 использовать). – jfs Feb 04 '17 at 11:42
  • @jfs, работают (но не так, как мне хотелось бы) первые два варианта из предложенных вами. А вот показать и имя поля, и значение третьим вариантом не выйдет. – mymedia Feb 04 '17 at 19:05