Jsoncpp是一个使用C++语言实现的面向对象的json库。
Jsoncpp提供的接口中有3个核心类:Reader、Writer、Value。
Reader类负责从字符串或者输入流中加载JSON文档,并进行解析,生成代表JSON文档的Value对象。 
Writer类负责将内存中的Value对象转换成JSON文档,可输出到文件或者是字符串中。 
Value类的对象代表一个JSON值,既可以代表一个文档,也可以代表文档中一个值。

一个JSON文档的大致过程如下:  
//准备Json源数据,如读取文档:Std::string strdoc = readFromFile(… );

.........

//生命顶级Value对象 
Json::Value root;

//声明Reader对象
Json::Reader _reader;

//解析json文档
_reader.paser(strdoc, root); 

Json::ValueType有8种,以下是定义。 enum Json::ValueType
Enumerator:
nullValue       '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).

static void printValueTree( FILE *fout, Json::Value &value, const std::string &path = "." )
{
switch ( value.type() )
{
case Json::nullValue:    //还可以通过isNull()判断其值: if(!value["id"].isNull()) 。。。fprintf( fout, "%s=null\n", path.c_str() );break;
case Json::intValue:fprintf( fout, "%s=%d\n", path.c_str(), value.asInt() );break;
case Json::uintValue:fprintf( fout, "%s=%u\n", path.c_str(), value.asUInt() );break;
case Json::realValue:fprintf( fout, "%s=%.16g\n", path.c_str(), value.asDouble() );break;
case Json::stringValue:fprintf( fout, "%s=\"%s\"\n", path.c_str(), value.asString().c_str() );break;
case Json::booleanValue:fprintf( fout, "%s=%s\n", path.c_str(), value.asBool() ? "true" : "false" );break;
case Json::arrayValue:
{fprintf( fout, "%s=[]\n", path.c_str() );int size = value.size();for ( int index =0; index < size; ++index ){static char buffer[16];sprintf( buffer, "[%d]", index );printValueTree( fout, value[index], path + buffer );}
}
break;
case Json::objectValue:
{fprintf( fout, "%s={}\n", path.c_str() );Json::Value::Members members( value.getMemberNames() );std::sort( members.begin(), members.end() );std::string suffix = *(path.end()-1) == '.' ? "" : ".";for ( Json::Value::Members::iterator it = members.begin(); it != members.end();         ++it ){const std::string &name = *it;printValueTree( fout, value[name], path + suffix + name );}
}
break;
default:break;
}
}

1) Json::Reader 是用于读取Json对象的值。
    用法:

Json::Value reader_object;
    Json::Reader reader;
    const char* reader_document = "{"path" : "/home/test.mp3","size" : 4000}";
    if (!reader.parse(reader_document, reader_object))
        return 0;
    std::cout << reader_object["path"] << std::endl;
    std::cout << reader_object["size"] << std::endl;
    结果:
    "/home/test.mp3"
    4000

2) 增加子节点

Json::Value root;

Json::Value leaf;

...

  root["leaf_node"] = leaf;

3) 值为数组的,通过对同一key逐个append方式追加:

root["key_array"].append("the string");  //元素值类型为字符串

root["key_array"].append(20);                  //元素值类型同时可为int等等

4) 解析数组值

JArray = root["key_array"];
    for ( unsigned int i = 0; i < JArray.size(); i++ )
    {
        cout << "JSON array values: " << JArray[i].asString() << endl;
    }

二. 通过使用Writer将Value转换为JSON文档(string):

1) Json::FastWriter用来快速输出Json对象的值,即。

用法:
      Json::FastWriter writer;
      std::cout << writer.write(json_media)<< std::endl;
    结果:
    {"isArray":["test1","test2"],"isBoolean":true,"isDouble":0.25,"size":4000,"isObject": {},"path":"/home/mp3/test.mp3"}

2) Json::StyledWriter用来格式化输出Json对象的值。

用法:
      Json::StyledWriter writer;
      std::cout << writer.write(json_media) << std::endl;
    结果:
    {
       "isArray" : [ "test1", "test2" ],
       "isBoolean" : true,
       "isDouble" : 0.24,
       "size" : 4000,
       "isObject" : {},
       "path" : "/home/mp3/test.mp3"
    }

转载于:https://www.cnblogs.com/nuaa/archive/2013/05/16/3082423.html

jsoncpp用法简述相关推荐

  1. __asm__ __volatile__内嵌汇编用法简述

    __asm__ __volatile__内嵌汇编用法简述 在阅读C/C++原码时经常会遇到内联汇编的情况,下面简要介绍下__asm__ __volatile__内嵌汇编用法.因为我们华清远见教学平台是 ...

  2. 新版Jsoncpp用法

    在新的Jsoncpp中 Json::Writer.Json::FastWriter.Json::Reader 等都被摒弃了, 用了新的Json::StreamWriterBuilder.Json::C ...

  3. php 对象的操作符,php面向对象之操作符'::'的用法简述

    什么是操作符"::"? 操作符"::"相比伪变量$this只能在类的内部使用来说更为强大.操作符"::"可以在没有任何声明任何实例的情况下访 ...

  4. C语言中typedef的用法简述

    typedef关键字 简述: 使用方法: 简述: typedef 为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,double,char等)和自定义的数据 ...

  5. (Linux)make编译用法简述

    前言 在Linux系统中我们经常会使用到make编译的命令来对一些源码包进行编译安装,下面就详细的解析一下make系列命令的用法. 命令详解 [1]make 等同于 make all 它是一个解释ma ...

  6. go语言os.exit(1)_Go语言os包用法简述

    os标准包,是一个比较重要的包,顾名思义,主要是在服务器上进行系统的基本操作,如文件操作,目录操作,执行命令,信号与中断,进程,系统状态等等.在os包下,有exec,signal,user三个子包. ...

  7. PHP foreach() 循环continue跳出循环用法简述

    一.普通循环 $arr=array("1","2","3","a");foreach ($arr as $k=>$ ...

  8. such as, for example, e.g., and so on, etc., et al, i.e. 用法简述

    个人认为: 1. such as 意为"比如".用于列举具体事物,结尾勿加 and so on 或 etc. 而画蛇添足. 例句:I have so many kinds of t ...

  9. Unity协程简述(简单用法,简易分析)

    Unity协程 协程的简单用法 简述 函数 协程的执行顺序 协程替我们做了什么 Yleid Return 如何进行跳帧,延迟,等待的操作 从IL的角度分析 IL语言 总结 自定义一个迭代器 优化 最后 ...

  10. python findall函数用法_Python--re模块的findall等用法

    1)正则表达式含义 . # 点可代表一切字符 \ # 起转义作用 [...] # 指代方括号中的任意字符 \d # 指代数字0-9 \D # 指代非数字 \s # 指代一切空格,包括tab制表符.空格 ...

最新文章

  1. 研究生扩招,数据发现清华北大本科生毕生后几乎没人找工作!
  2. 七牛云的存储对象的地区改变之后
  3. 开机后能解锁吗_黔隆科技刷机教程360奇酷Q5PLUS(1509A00)忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  4. Mac下安装及使用rz、sz远程上传下载文件
  5. BugKuCTF 杂项 白哥的鸽子
  6. 基于android的高仿抖音,Android仿抖音列表效果
  7. SpringBoot系列(8):SpringBoot中的MVC支持【组件型注解、请求和参数型注解】详解
  8. 模拟退火算法及MATLAB代码
  9. Tomcat启动报错记录与千里追踪[持续记录]
  10. vue项目在ie浏览器下运行显示空白页面
  11. 软件开发中常见知识总结
  12. JavaWeb-简析MVC三层架构
  13. linux运行luminati,安装luminati的nodejs环境配置
  14. 詹姆斯高斯林_詹姆斯·高斯林(James Gosling)加入RCDb顾问委员会
  15. 最大类间方差法(大津法OTSU)原理
  16. 移动端点击出现蓝色框的解决方案
  17. 第15章 嵌入式SQL的应用
  18. 美丽的清晨,美好的开始
  19. 51单片机系列——基于单片机的蓝牙LED摇摇棒设计
  20. 基于EP4CE10F17C8的以太网数据回环(UDP)

热门文章

  1. kubernetes视频教程笔记 (3)-Pod及其网络通讯方式
  2. Kubernetes 小白学习笔记(32)--kubernetes云原生应用开发-sidecar注入和istio服务治理演示
  3. MRTK 当进入某个物体时调用的函数
  4. Leetcode之最长回文子串
  5. java 写文件缓存_使用java NIO及高速缓冲区写入文件过程解析
  6. combobox的method是get为什么发的请求是post_深入理解http get和post请求的区别,读完之后,大部分程序员收藏了...
  7. jQuery 省市区多级(三级/四级/五级。。。)联动 BY 凨来了
  8. Beyond Compare 4 智能比较工具、Everything 文件/夹搜索工具,WinRAR,7-Zip 解压缩工具、diagrams 流程图工具
  9. Spring Boot @PropertySource 加载配置文件、@ImportResource 导入Spring 配置文件
  10. 阶段3 2.Spring_07.银行转账案例_7 代理的分析