json、json-c、jsoncpp是3套不同的代码,其中的函数接口也大不一样,其中jsoncpp针对c++语言编写的。json-c比json要复杂一些,处理、容错能力稍强一些。
jsoncpp中json被抽象成了Value类,jsoncpp中还有Writer和Reader类,分别对json进行输出和输入
Reader类:从文本解析json
构造函数
Reader(); //空构造函数
Reader(const Features& features);// 用法:Reader(Features::strictMode());
成员函数
//将string对象解析到root中
bool parse(const std::string& document, Value& root, bool collectComments = true);
bool parse(const char* beginDoc,
const char* endDoc,
Value& root,
bool collectComments = true);
//从文件中解析数据到root中,JSONCPP_ISTREAM就是std::istream
bool parse(JSONCPP_ISTREAM& is, Value& root, bool collectComments = true);
到此基本够用可,其他成员函数参看相应文件
Writer类:将json解析成字符串
Writer是个基类,代码很少,如下:
class JSON_API Writer {
public:
virtual ~Writer();
virtual JSONCPP_STRING write(const Value& root) = 0;
};
Writer派生出StreamWriter,FastWriter,StyledWriter等几类
StreamWriter类:作用是将json写到配置文件里去,
virtual int write(Value const& root, JSONCPP_OSTREAM* sout) = 0;//纯虚函数,以供派生
全局函数:
//全局函数:将json输出成string类型
JSONCPP_STRING JSON_API writeString(StreamWriter::Factory const& factory, Value const& root);
FastWriter类:
JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE;
StyledWriter类:
JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE;
Value类
Json::value类是json对象的一个封装。它可以代表以下几种类型的值:
有符号整型
无符号整型
双精度
字符串
布尔类型
NULL
数组值
键值对 集合
构造函数:
Value( ValueType type = nullValue );
Value( Int value );
Value( UInt value );
Value( double value );
Value( const char *value );
Value( const char *beginValue, const char *endValue );
//使用方法、例子
Json::Value null_value; // null
Json::Value arr_value(Json::arrayValue); // []
Json::Value obj_value(Json::objectValue); // {}
以上构造函数可以实例化一个指定值类型的Json::value对象
Value( const StaticString &value );
Value( const std::string &value );
# ifdef JSON_USE_CPPTL
Value( const CppTL::ConstString &value );
# endif
Value( bool value );
Value( const Value &other );
//Example of usage:
Json::Value aValue( StaticString("some text") );
Value &operator=( const Value &other ); //直接利用已有的Json::value对象赋值
void swap( Value &other ); //交换json对象
ValueType type() const; //返回值类型
下面这下函数指定了Json::value对象的返回值类型:
const char *asCString() const;
std::string asString() const;
# ifdef JSON_USE_CPPTL
CppTL::ConstString asConstString() const;
# endif
Int asInt() const;
UInt asUInt() const;
double asDouble() const;
bool asBool() const;
判断指定键值对的值类型:
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;
UInt size() const; //返回数组或对象中值的数量
bool empty() const; //空数组或者空对象或NULL的话返回true,否则返回false
void clear(); //清空对象或数组成员
几个访问键值对的函数:
Value &operator[]( UInt index ); //访问数组元素
const Value &operator[]( UInt index ) const;
Value &operator[]( const char *key ); //通过名字访问键值对
const Value &operator[]( const char *key ) const;
Value &operator[]( const std::string &key );
const Value &operator[]( const std::string &key ) const;
Value &operator[]( const StaticString &key );