jsoncpp一个简单的解析json的库

前端之家收集整理的这篇文章主要介绍了jsoncpp一个简单的解析json的库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

猜你在找的Json相关文章