jsoncpp简单用法
jsoncpp主要包含三种类型的@H_301_6@class:@H_301_6@Value、@H_301_6@Reader、@H_301_6@Writer。@H_301_6@jsoncpp中所有对象、类名都在@H_301_6@namespaceJson中,包含@H_301_6@json.h即可。
Json::Value只能处理@H_301_6@ANSI类型的字符串,如果@H_301_6@C++程序是用@H_301_6@Unicode编码的,最好加一个@H_301_6@Adapt类来适配。
1、@H_301_6@Value
Json::Value是@H_301_6@jsoncpp中最基本、最重要的类,用于表示各种类型的对象,@H_301_6@jsoncpp支持的对象类型可见@H_301_6@Json::ValueType枚举值。
可如下是用@H_301_6@Json::Value类:
Json::Valuejson_temp;//临时对象,供如下代码使用
json_temp["name"]=Json::Value(“@H_301_6@huchao”@H_301_6@);
json_temp["age"]=Json::Value(26);
Json::Valueroot;//表示整个@H_301_6@json对象
root["key_string"]=Json::Value(“@H_301_6@value_string”@H_301_6@);//新建一个@H_301_6@Key(名为:@H_301_6@key_string),赋予字符串值@H_301_6@:”@H_301_6@value_string”
root["key_number"]=Json::Value(12345);//新建一个@H_301_6@Key(名为@H_301_6@:key_number),赋予数值@H_301_6@:12345。
root["key_boolean"]=Json::Value(false);//新建一个@H_301_6@Key(名为@H_301_6@:key_boolean),赋予@H_301_6@bool值@H_301_6@:false。
root["key_double"]=Json::Value(12.345);//新建一个@H_301_6@Key(名为@H_301_6@:key_double),赋予@H_301_6@double值@H_301_6@:12.345
root["key_object"]=Json_temp;//新建一个@H_301_6@Key(名为@H_301_6@:key_object),赋予@H_301_6@json::Value对象值。
root["key_array"].append(“@H_301_6@array_string”@H_301_6@);//新建一个@H_301_6@Key(名为@H_301_6@:key_array),类型为数组@H_301_6@,对第一个元素赋值为字符串@H_301_6@:”@H_301_6@array_string”
root["key_array"].append(1234);//为数组@H_301_6@key_array赋值@H_301_6@,对第二个元素赋值为@H_301_6@:1234。
Json::ValueTypetype=root.type();//获得@H_301_6@root的类型,此处为@H_301_6@objectValue类型。
注:跟@H_301_6@C++不同,@H_301_6@JavaScript数组可以为任意类型的值,所以@H_301_6@jsoncpp也可以。
如上几个用法已经可以满足绝大部分@H_301_6@json应用了,当然@H_301_6@jsoncpp还有一些其他同能,比如说设置注释、比较@H_301_6@json大小、交换@H_301_6@json对象等,都很容易使用,大家自己尝试吧。
2、@H_301_6@Writer
如上说了@H_301_6@Json::Value的使用方式,现在到了该查看刚才赋值内容的时候了,查看@H_301_6@json内容,使用@H_301_6@Writer类即可。
Jsoncpp的@H_301_6@Json::Writer类是一个纯虚类,并不能直接使用。在此我们使用@H_301_6@Json::Writer的子类:@H_301_6@Json::FastWriter、@H_301_6@Json::StyledWriter、@H_301_6@Json::StyledStreamWriter。
顾名思义,用@H_301_6@Json::FastWriter来处理@H_301_6@json应该是最快的,下面我们来试试。
Json::FastWriterfast_writer;
std::cout<<fast_writer.write(root)<<std::endl;
输出结果为:
{“@H_301_6@key_array”@H_301_6@:["array_string",1234],”@H_301_6@key_boolean”@H_301_6@:false,”@H_301_6@key_double”@H_301_6@:12.3450,”@H_301_6@key_number”@H_301_6@:12345,”@H_301_6@key_object”@H_301_6@:{“@H_301_6@age”@H_301_6@:26,”@H_301_6@name”@H_301_6@:”@H_301_6@huchao”@H_301_6@},”@H_301_6@key_string”@H_301_6@:”@H_301_6@value_string”@H_301_6@}
再次顾名思义,用@H_301_6@Json::StyledWriter是格式化后的@H_301_6@json,下面我们来看看@H_301_6@Json::StyledWriter是怎样格式化的。
Json::StyledWriterstyled_writer;
std::cout<<styled_writer.write(root)<<std::endl;
{
“@H_301_6@key_array”@H_301_6@:["array_string",
“@H_301_6@key_boolean”@H_301_6@:false,255)">“@H_301_6@key_double”@H_301_6@:12.3450,255)">“@H_301_6@key_number”@H_301_6@:12345,255)">“@H_301_6@key_object”@H_301_6@:{
“@H_301_6@age”@H_301_6@:26,255)">“@H_301_6@name”@H_301_6@:“@H_301_6@huchao”
},
“@H_301_6@key_string”@H_301_6@:“@H_301_6@value_string”
}
3、@H_301_6@Reader
Json::Reader是用于读取的,说的确切点,是用于将字符串转换为@H_301_6@Json::Value对象的,下面我们来看个简单的例子。
Json::Readerreader;
Json::Valuejson_object;
constchar*json_document=“@H_301_6@{/”@H_301_6@age/”@H_301_6@:26,/”@H_301_6@name/”@H_301_6@:/”@H_301_6@huchao/”@H_301_6@}”@H_301_6@;
if(!reader.parse(json_document,json_object))
return0;
std::cout<<json_object["name"]<<std::endl;
std::cout<<json_object["age"]<<std::endl;
“@H_301_6@huchao”
26