【json】jsoncpp函数接口

9 篇文章 0 订阅

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 );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值