jsoncpp接口总结
value类型总结
enum ValueType { nullValue = 0, ///< 'null' value intValue, ///< signed integer value uintValue, ///< unsigned integer value realValue, ///< double value stringValue, ///< UTF-8 string value booleanValue, ///< bool value arrayValue, ///< array value (ordered list) objectValue ///< object value (collection of name/value pairs). };
获取类型函数Json::Value中的type函数
value值获取函数
const char *asCString() const; std::string asString() const; Int asInt() const; UInt asUInt() const; Int64 asInt64() const; UInt64 asUInt64() const; LargestInt asLargestInt() const; LargestUInt asLargestUInt() const; float asFloat() const; double asDouble() const; bool asBool() const;
数组类型操作
数组解析
Json::Value root; Json::Reader reader; if(!reader.parse(str_data, root)){ // error processing } // 这里一定要注意,如果不是array类型,这里的size函数返回的是key的个数 int array_size = root.size(); for(i=0;i<array_size;i++){ Json::Value obj = root[i]; // do something with obj }
数组解析的时候一定要注意size()在不是数组类型的时候也是有值返回的,此时返回的是json中key的个数。
构建json数组类型
Json::Value arrayjson; for (iterator) { Json::Value jsonobj; jsonobj["a"] = "b"; arrayjson.append(jsonobj); }
json转化为string
Json::FastWriter writer;
str = writer.write(root);
总体来说json作为存储或者网络协议,操作简单,扩展性好;但是其劣势也非常明显:
1. 二进制数据支持不好,经常需要借助base64来解决问题;
2. 占用存储空间大,浪费磁盘和网络带宽;
3. 解析效率低;