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. 解析效率低;

时间: 2025-01-07 09:45:18

jsoncpp接口总结的相关文章

&lt;转&gt;c++ builder JSONCPP 注意事项 XE2 解决编译问题 _Mfl

在C++Builder中使用JSONCPP需要注意的问题 1.使用STL的MAP而不是内建的MAP这个问题实际上和编译器无关.内建的MAP不是很稳定,当解析数据大于600K左右时,会崩溃.虽然一般来说JSON的数据大不到哪里去,但不代表数据量小时稳定性就不没有问题,只可能是发生的概率小一些.所以还是使用内建的MAP好一些,测试几兆的数据都没有问题.使用STL MAP的方法是编译时不要定义JSON_VALUE_USE_INTERNAL_MAP变量.2.要在2007中编译通过,需要修改一点代码.之所

JSON和jsoncpp库

JSON是一种轻量级的数据交换格式,易于人编写和阅读,同时也易于机器解析和生成. JSON建构于两种结构:对象(名称/值对的集合).数组(值的有序列表),其中名称是一个字符串,值的类型包括:字符串.数字.布尔值.对象.数组.null值. jsoncpp是一个使用C++语言实现的面向对象的json库,提供的接口有3个核心类:Reader.Writer.Value. Reader类负责从字符串或者输入流中加载JSON文档,并进行解析,生成代表JSON文档的Value对象:Writer类负责将内存中的

ndk编译jsoncpp

本例采用jsoncpp-src-0.6.0-rc2-amalgamation.tar java调用语句 int id = 1001;          String name = "Kevin";          String result = system.toBuildJson(id, name);          Log.i(TAG,String.format("Id:%1$d,Name:%2$s,The json formated string:%3$s"

jsoncpp 不能处理long类型数据

jsoncpp,是一个c++的解析和生成json的开源工具.如果你的c++程序需要解析或生成json,它会使这个过程变得很简单! 但是,今天在用jsoncpp进行生成json的时候报了错误,很显然这不是我程序的问题. Test.cpp: In function 'std::string createJsonData()': Test.cpp:41: error: conversion from 'long long int' to 'const Json::Value' is ambiguous

json-cpp 库使用

Json-cpp 是一个使用c++开发的面向对象的json库. 核心数据结构 Reader是json-cpp数据的读取器,可以从文件流,字符串中读取json数据,使用下面的接口: boolparse( const std::string &document, Value &root, bool collectComments = true); boolparse( std::istream &is, Value &root, bool collectComments = t

编译jsoncpp库以及要注意的问题

原创文章,转载请注明原作者与本文原始URL. 版本:jsoncpp-src-0.5.0.zip简介:jsoncpp是用cpp实现的json库,可以拼装,解析,生成json串.我们要把他编译成动态库.这个库使用 scons 来组织工程的,并且要用python编译,而不是我熟悉的Makefile.要编译的文件全部位于 ./src/lib_json,其实就3个.cpp文件.为了编译方便,我自己写了Makefile如下: g++ json_reader.cpp json_value.cpp json_w

利用百度云接口实现车牌识别&#183;python

一个小需求---实现车牌识别. 目前有两个想法 1. 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 2. 自己实现车牌识别算法(复杂) 一开始准备使用百度云文字识别C++ SDK来做,发现需要准备curl.jsoncpp和OpenCV,并且curl和jsoncpp需要自己编译,很麻烦,所以换用了python来做,真的是顺畅简单. 1. 安装python环境(我用python3.7) python官网下载地址:https://www.py

微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守.昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.微信公众号也可以发放现金红包了! 通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果. 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领

jsoncpp使用经验

jsoncpp判断某个字段是否存在的方法如下: 1)if (root["url"].type() != Json::nullValue) 2)if(value["sex"].isNull()) 注意事项 1)jsoncpp是一个c++使用的json库,通过重载中括号[]来实现json的语法,但是由于c++ 是一个强类型的语言,jsoncpp在实现过程中,使用了大量的断言,如果遇到类型不正确的 时候,就会强制断言,导致程序退出 例如,将如下的字符串传递给jsoncpp