首页 > 代码库 > JsonCpp使用
JsonCpp使用
JsonCpp主要包含三种类型的class:Value Reader Writer。
jsoncpp中所有对象、类名都在namespace json中,包含json.h即可
- Json::Value :可以表示所有支持的类型,如:int , double ,string , object, array等
- Json::Reader :将文件流或字符串创解析到Json::Value中,主要使用parse函数。
- Json::Writer : 与JsonReader相反,将Json::Value转换成字符串流等。
Json内部类和方法:
Reader<是用于读取的,说的确切点,是用于将字符串转换为 Json::Value 对象的>
【构造函数】
1、Reader();
2、Reader( const Features &features );
【将字符串或者输入流转换为JSON的Value对象】
【下边是相应的parse的重载函数】
3、bool parse( const std::string &document, Value &root,bool collectComments = true );
4、bool parse( const char *beginDoc, const char *endDoc, Value &root,bool collectComments = true
5、bool parse( std::istream &is,Value &root,bool collectComments = true );
Value:<是jsoncpp 中最基本、最重要的类,用于表示各种类型的对象,jsoncpp 支持的对象类型可见 Json::ValueType 枚举值; Value类的对象代表一个JSON值,既可以代表一个文档,也可以代表 文档中一个值。如同JSON中定义的“值”一样,Value是递归的>
【相同类型的比较、交换、类型的获取】
3、void swap( Value &other );
ValueType type() const;
int compare( const Value &other );
【相应的赋值运算符的重载函数】
4、Value &operator=( const Value &other );
bool operator <( const Value &other ) const;
bool operator <=( const Value &other ) const;
bool operator >=( const Value &other ) const;
bool operator >( const Value &other ) const;
bool operator ==( const Value &other ) const;
bool operator !=( const Value &other ) const;
bool operator!() const;
Value &operator[]( UInt index );
const Value &operator[]( UInt index ) const;
【将Value对象进行相应的类型转换】
5、const char *asCString() const;
std::string asString() const;
const char *asCString() const;
std::string asString() const;
Int asInt() const;
UInt asUInt() const;
double asDouble() const;
【相应的判断函数】
6、bool isNull() const;
bool isBool() const;
bool isInt() const;
bool isUInt() const;
bool isIntegral() const;
bool isDouble() const;
bool isNumeric() const;
bool isString() const;
bool isArray() const;
bool isObject() const;
bool isConvertibleTo( ValueType other ) const;
bool isValidIndex( UInt index ) const;
bool isMember( const char *key ) const;
bool isMember( const std::string &key ) const;
【清除和扩容函数】
7、void clear();
void resize( UInt size );
【获取满足相应条件的Value】
8、Value get( UInt index, const Value &defaultValue ) const;
Value get( const std::string &key,const Value &defaultValue ) const;
Members getMemberNames() const;
【删除满足相应条件的Value】
9、Value removeMember( const char* key );
Value removeMember( const std::string &key );
10、void setComment( const char *comment,CommentPlacement placement );
void setComment( const std::string &comment,CommentPlacement placement );
bool hasComment( CommentPlacement placement ) const;
std::string getComment( CommentPlacement placement ) const;
std::string toStyledString()const;
Jsoncpp 的 Json::Writer 类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读)
JsonCpp读写示例代码:
#include <json/json.h>#include <sstream>#include <iostream>#include <fstream>void read_json(){ std::ifstream ifs; ifs.open("a.json"); std::stringstream buffer; buffer << ifs.rdbuf(); ifs.close(); auto str = buffer.str(); Json::Reader reader; Json::Value value; if (reader.parse(str, value)) { if (value["name"].isString()) { std::string name = value["name"].asString(); std::cout << name << std::endl; } std::cout << value["age"].asInt() << std::endl; //根据Key获取值时最好判断类型,否则解析会中断 const Json::Value arrayObj = value["like"]; for (unsigned int i = 0; i < arrayObj.size(); i++) { if (!arrayObj[i].isMember("book")) continue; auto out = arrayObj[i]["book"].asString(); std::cout << out; } }}void write_json(){ Json::FastWriter write; Json::Value root; Json::Value item; Json::Value arrayObj; item["book"] = "c++"; item["food"] = "apple"; item["music"] = "ddx"; arrayObj.append(item); root["name"] = "dsw"; root["age"] = 18; root["like"] = arrayObj; //注意:这里不能用append,append功能是将Json::Value添加到数组末尾 auto str = root.toStyledString(); std::cout << str << std::endl; std::ofstream ofss; ofss.open("a.json"); ofss << str; ofss.close();}int main()
{ write_json(); read_json(); getchar(); return 0;}
JsonCpp使用