Я пытаюсь понять преобразование JSON в строку и строку в JSON, используя инфраструктуру nlohmann для библиотеки JSON на С++. Однако у меня возникает проблема с генерируемым исключением, и я не понимаю, почему оно создается.
Ниже приведен код, который я использовал из фреймворка nlohmann. Я попытался создать объект JSON «j_string», добавить атрибут «transformation_matrix» и добавить к нему соответствующее значение типа строки из предопределенной переменной «приветствия». Теперь я пытаюсь преобразовать строку в JSON, затем разобрать ее и снова преобразовать в строку. В основном я пытаюсь отправить эти данные по UDP, что является всей идеей моего проекта. Для этого мне нужно преобразовать строку в JSON, выполнить некоторые вычисления, чтобы извлечь определенное значение атрибута, а затем преобразовать его обратно в строку и отправить по UDP. Когда я пытаюсь преобразовать строку в JSON, я получаю исключение от компилятора. Я использую Visual Studio 2019. Создается следующее исключение:
«Необработанное исключение по адресу 0x772718A2 в jsoncpp2.exe: исключение Microsoft C++: nlohmann::detail::type_error в ячейке памяти 0x00E9F504».
Дайте мне знать, почему создается такое исключение. Когда я компилирую код, он говорит, что нет ошибок. Однако, когда я его выполняю, я получаю исключение. Я добавил необходимые файлы и заголовки.
#include<iostream>
#include<sstream>
#include<nlohmann/json.hpp>
using json = nlohmann::json;
int main() {
std::string greetings = "greetings from string";
json j_string;
j_string["transformation matrix"] = greetings;
auto cpp_string = j_string.get<std::string>();
std::string serialized_string = j_string.dump();
std::cout << serialized_string << '\n';
}
Мой ожидаемый результат:
[
"transfornation matrix" : "greetings from string"
]
Извините, я совсем новичок в JSON. Что такое UTF8? Почему это незаконно?
UTF8 — единственная комбинация байтов, допустимая в JSON. json nlohmann довольно хорошо сигнализирует об этом, если я правильно помню. UTF8 — это отдельная глава, но это не волшебство, это просто камберсум. Введение: UTF8 везде





В целях общей безопасности вы должны убедиться, что j_string.is_string(), прежде чем вызывать j_string.get<std::string>(), чтобы избежать таких исключений.
Также обратите внимание, что, поскольку вы только что использовали присваивание объектного стиля с j_string["transformation matrix"] = greetings;, j_string становится типом объект. Если бы вы вместо этого присвоили строку j_string напрямую, она вместо этого приняла бы тип нить.
Это описано в первых двух строках примеры nlohmann/json.
// create an empty structure (null)
json j;
// add a number that is stored as double (note the implicit conversion of j to an object)
j["pi"] = 3.141;
У меня нет своего разработчика. среда близка, но если я правильно помню, json nlohmann выбрасывает, если вы вводите его не в формате utf8. это незаконно по стандарту. Попробуйте ловить исключения. Это дикая догадка.