c 解析json时,使用nlohmann json工具解析方便快捷。把它记录下来,方便以后查阅。
//地址:https://github.com/nlohmann/json, 需要引用的头文件位置:single_include/nlohmann/json.hpp
//需要引用的头文件,在使用时,将这个文件加入到工程中即可,只添加这一个文件就行
//#include "json.hpp"
//using nlohmann::json;
//创建普通元素和子元素
/*{
"answer":{"everything":42},
"happy":true,
"list":[0,1,2],
"name":"mike",
"nothing":null,
"object":{
"currency":"usd",
"value":23
},
"pi":3.14
}*/
//
json j;
j["pi"] = 3.14;
j["happy"] = true;
j["name"] = "mike";
j["nothing"] = nullptr;
j["answer"]["everything"] = 42;
j["list"] = {0, 1, 2};
j["object"] = {
{"currency", "usd"}, {"value", 23}};
cout<
//创建空的对象
//{}
json empty_implicit = json({});
json empty_explicit = json::object();
cout<
//创建数组
//[]
json empty_array = json::array();
cout<
//异常处理(重要)
json::parse()异常处理:
1. //为了避免匹配失败导致程序异常,需要修改为
auto createjson_31 = json::parse(r"({"happy": true, "pi": 3.14})", nullptr, false);
//parse的第二个参数是回调函数指针,可以为空,第三个参数指示是否抛出异常,可以改为false,然后使用前增加判断
if (!(createjson_31.is_null()) && !(createjson_31.is_discarded()))
{
}
2.//用try catch捕捉异常
const string sjson="dfdsard";
try
{
json j2 = json::parse(sjson.c_str());
}
catch (json::parse_error& ex)
{
std::cerr << "parse error " << ex.what() << std::endl;
}
3. //提前判断字符串是否能转成json
string sjson="123123";
if (!json::accept(sjson))
{
std::cerr << "parse error" << std::endl;
}
其他异常判断
//在访问json数据前,应判断是否存在
if (createjson_31.contains("happy"))
{
}
//在取值前,应判断类型,类型不匹配会出现异常
if (createjson_31["happy"].is_boolean())
{
bool ha = createjson_31["happy"];
cout< }
if (createjson_31["pi"].is_number_float())
{
double pi = createjson_31["pi"];
cout< }