У меня есть строка, которую я хотел бы разобрать в JSON, но _json
кажется, не работает каждый раз.
#include <nlohmann/json.hpp>
#include <iostream>
using nlohmann::json;
int main()
{
// Works as expected
json first = "[\"nlohmann\", \"json\"]"_json;
// Doesn't work
std::string s = "[\"nlohmann\", \"json\"]"_json;
json second = s;
}
Первая часть работает, вторая бросает terminate called after throwing an instance of 'nlohmann::detail::type_error'
,
what(): [json.exception.type_error.302] type must be string, but is array
Добавление _json
строковому литералу указывает компилятору интерпретировать его как литерал JSON.
Очевидно, что объект JSON может равняться значению JSON, но строка не может.
В этом случае вы должны удалить _json
от буквального, но это делает second
строковое значение, скрывающееся внутри объекта JSON.
Итак, вы также используете json::parse
, как это:
std::string s = "[\"nlohmann\", \"json\"]";
json second = json::parse(s);
Других решений пока нет …