// MyJsonTest.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <fstream>
#include <cassert>
#include "json/json.h" using namespace std;
/**************************************************************
技术博客
http://www.cnblogs.com/itdef/ 技术交流群
群号码:324164944 欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
**************************************************************/ void test1() {
Json::Value root;
Json::FastWriter writer;
Json::Value person; person["FileName"] = "test1";
person["fileLength"] = ""; // 4G以内文件
person.removeMember("fileLength");
root.append(person);
person["FileName"] = "test2";
person["fileLength"] = ""; // 4G以内文件
root.append(person);
person["FileName"] = "test3";
person["fileLength"] = ""; // 4G以内文件
root.append(person); std::string json_file = writer.write(root); ofstream ofs;
ofs.open("test1.json", ios::trunc);
assert(ofs.is_open());
ofs << json_file;
ofs.close();
} int test2() {
Json::Reader pJsonParser;;
string strJson = "{\"name\":\"tom\",\"sex\":\"男\",\"age\":\"24\",\"friends\":[{\"name\":\"chen\",\"sex\":\"男\"},{\"name\":\"li\",\"sex\":\"女\"}]}";
Json::Value tempVal; if (!pJsonParser.parse(strJson, tempVal))
{
cout << "parse error" << endl;
return -;
} string name = tempVal["name"].asString();
string sex = tempVal["sex"].asString();
string age = tempVal["age"].asString(); Json::Value friends = tempVal["friends"];
for (int i = ; i < friends.size(); i++) {
cout << friends[i]["name"].asString() << endl;
}
cout << "name = " << name << " age = " << age << " sex = " << sex << endl; return ;
} void test3() {
Json::Value root;
Json::Value arrayObj;
Json::Value item;
Json::FastWriter writer;
for (int i = ; i<; i++)
{
item["key"] = i;
arrayObj.append(item); //数组项添加
}
root["key1"] = "value1";
root["key2"] = "value2";
root["key3"] = 0x100;
root["key4"] = true;
root["key5"] = "中国人";
item = root["key5"];
root["array"] = arrayObj;
std::cout << root.toStyledString();
std::cout << writer.write(root);
} void test4() {
char* config_doc = "{\"encoding\" : \"UTF-8\",\"plug-ins\" : [\"python\",\"c++\",\"ruby\"],\"indent\" : { \"length\" : 3, \"use_space\" : true }}"; Json::Value root; // will contains the root value after parsing.
Json::Reader reader;
bool parsingSuccessful = reader.parse(config_doc, root);
if (!parsingSuccessful)
{
// report to the user the failure and their locations in the document.
std::cout << "Failed to parse configuration\n";
return;
} // Get the value of the member of root named 'encoding', return 'UTF-8' if there is no
// such member.
std::string encoding = root.get("encoding", "UTF-8").asString();
// Get the value of the member of root named 'encoding', return a 'null' value if
// there is no such member.
const Json::Value plugins = root["plug-ins"];
for (int index = ; index < plugins.size(); ++index) // Iterates over the sequence elements.
std::cout << plugins[index].asString() << std::endl; std::cout << root["indent"].get("length", ).asInt() << std::endl; std::cout << root["indent"].get("use_space", true).asBool() << std::endl;; // ...
// At application shutdown to make the new configuration document:
// Since Json::Value has implicit constructor for all value types, it is not
// necessary to explicitly construct the Json::Value object:
//root["encoding"] = getCurrentEncoding();
//root["indent"]["length"] = getCurrentIndentLength();
//root["indent"]["use_space"] = getCurrentIndentUseSpace(); Json::StyledWriter writer;
// Make a new JSON document for the configuration. Preserve original comments.
std::string outputConfig = writer.write(root); // You can also use streams. This will put the contents of any JSON
// stream at a particular sub-value, if you'd like.
//std::cin >> root["subtree"]; // And you can write to a stream, using the StyledWriter automatically.
std::cout << root;
} void test5() {
Json::Reader reader;
Json::Value root;
Json::StyledStreamWriter writer;
std::string text = "{ \"first\": \"James\", \"last\": \"Bond\", \"nums\": [0, 0, 7] }";
std::ofstream outFile; // Parse JSON and print errors if needed
if (!reader.parse(text, root)) {
std::cout << reader.getFormatedErrorMessages();
exit();
}
else { // Read and modify the json data
std::cout << "Size: " << root.size() << std::endl;
std::cout << "Contains nums? " << root.isMember("nums") << std::endl;
root["first"] = "Jimmy";
root["middle"] = "Danger"; // Write the output to a file
outFile.open("output.json");
writer.write(outFile, root);
outFile.close();
}
} int main()
{
test5(); return ;
}

考虑在打包时候使用json记录打包文件信息
但是json似乎不支持64位数据 那么大于4G的文件长度怎么记录?这是个问题

代码见

http://www.oschina.net/code/snippet_614253_56645

jsoncpp学习的更多相关文章

  1. C++之jsoncpp学习

    最新由于客户端要用到jsoncpp,所以自己也跟着项目的需求学了一下jsoncpp.以前没用过xml,但是感觉接触json后,还蛮好用的. 参考地址 http://jsoncpp.sourceforg ...

  2. JSONCPP学习笔记

    基本使用 使用jsoncpp库解析.修改.打印JSON串 源文件 $ cat main.cpp #include <iostream> #include "json/json.h ...

  3. Qt学习日记篇-Qt中使用Curl和jsonCpp

    1.Qt中安装并使用jsonCPP库 1.1  官网下载.https://sourceforge.net/projects/jsoncpp/    解压文件得到 jsoncpp-src-0.5.0 文 ...

  4. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  5. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  6. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  7. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

随机推荐

  1. TCP建立连接的三次握手和TCP连接断开的四次挥手

    1. TCP建立连接的3次握手 2. TCP断开连接的四次挥手 [注意]中断连接端可以是Client端,也可以是Server端. 图3—Client端主动发起关闭连接请求 1. 假设Client端主动 ...

  2. Linux内核 runtime_PM 框架

    runtime PM (runtime power management) 简介: 怎样动态地打开关闭设备的电源 ? 最简单的方法:在驱动程序中,open时打开电源,在close时关闭电源.但是有一个 ...

  3. string学习

    来自:http://www.cnblogs.com/kkgreen/archive/2011/08/24/2151450.html 0,new是创了两个对象,一个在堆,一个在常量池 1,变量+字符串= ...

  4. gpio_get_value的定义 (转)

    gpio_get_value等一系列函数,并非Linux标准函数,而是跟硬件相关的. 通常我们说的driver都是跟外围设备相关的,所以需要我们自己开发,但是这次我们说到的gpio是跟soc相关的,其 ...

  5. Androoid studio 2.3 AAPT err(Facade for 596378712): \\?\C:\Users\中文文件夹\.android\build-cache

    错误如下: Error:Some file crunching failed, see logs for details Error:Execution failed for task ':app:m ...

  6. hudson插件说明

    Artifactory Plugin:maven仓库管理工具 Backup plugin 可以备份hudson_home下所有文件,除了svncode.这个插件有问题,不能使用. Build Publ ...

  7. Linux常用系统函数

    Linux常用系统函数 一.进程控制 fork 创建一个新进程clone 按指定条件创建子进程execve 运行可执行文件exit 中止进程_exit 立即中止当前进程getdtablesize 进程 ...

  8. SqlServer快速获得表总记录数(大数据量)

    --第1种 执行全表扫描才能获得行数 SELECT count(*) FROM BUS_tb_UserGradePrice --第2种 执行扫描全表id不为空的,获得行数 select count(u ...

  9. IO在block级别的过程分析

    btt User Guide在百度找了3天没找到,bing也不行,结果google第一页第5个结果就是. 可恶的GFW http://www.fis.unipr.it/doc/blktrace-1.0 ...

  10. python数据库连接池基于DBUtils

    DBUtils模块的使用的两种方式 DBUtils是Python的一个用于实现数据库连接池的模块 安装 pip install DBUtils 1.使用姿势一(不建议此方法) 为每个线程 (资源占用过 ...