jsoncpp之初体验

参考文章 http://blog.csdn.net/JoeBlackzqq/article/details/9043315 , 我将里面的代码做在了一个工程亲自体验了下。


1. 下载jsoncpp源码, 地址: http://nchc.dl.sourceforge.net/project/jsoncpp/jsoncpp/0.5.0/jsoncpp-src-0.5.0.tar.gz

2. 编译json,生成静态lib文件

源码解压后,结构如下:



我的jsoncpp解压后存放目录为:D:\Desktop\jsoncpp-src-0.5.0, 打开其中的D:\Desktop\jsoncpp-src-0.5.0\makefiles\vs71\jsoncpp.sln,因为我系统上装的是vc2010,所以会出现版本转换窗口,按默认即可!

修改工程属性如下:




编译,应该会生成lib_json.lib文件,至此,静态库就生成了!


3. 新建win32控制台工程json_app1, 添加代码(m.cpp):

/*jsoncpp初体验, jsoncpp源代码下载地址:http://nchc.dl.sourceforge.net/project/jsoncpp/jsoncpp/0.5.0/jsoncpp-src-0.5.0.tar.gz环境: vc2010下编译出来的json.lib编译json.lib前,需设置工程属性: Release: 配置属性 -> C/C++ -> 代码生成: 运行库="多线程 DLL (/MD)"Debug: 配置属性 -> C/C++ -> 代码生成: 运行库=多线程调试 DLL (/MDd)" json_app1的属性设置要与调用的json.lib的工程属性一致,否则会出错的!
*/#include <stdio.h>
#include <iostream>
#include <json.h>using namespace std;
using namespace Json;void test_Json_FastWriter(Value &root)
{FastWriter fastwriter;cout << fastwriter.write(root) << endl;
}void test_Json_StyledWriter(Value &root)
{StyledWriter styled_writer;cout << styled_writer.write(root) << endl;
}bool test_Json_Reader()
{Reader reader;Value json_object;const char* jsonString = "{\"age\" : 26, \"name\" : \"huchao\"}";if (!reader.parse(jsonString, json_object))return false;// 错误的输出方式cout << json_object["name"];							// cout的运行算符"<<"并没有对Json::Value类型的重载,所以这种使用方式得到的结果并不可靠cout << json_object["age"];								// 这种输出方式会自动在输出内容后换行cout << json_object["name"] << json_object["age"];		// 错误的输出方式,因为会自动在输出一个Json::Value对象后自动换行,与预期的不一样吧!cout << "-----------------------------------------------------" << endl;// 正确的输出方式cout << json_object["name"].asCString() << endl;		// 这才是正确的输出方式cout << json_object["age"].asInt() << endl;cout << json_object["name"].asCString() << ", " << json_object["age"].asInt() << endl;//	printf("name=[%s], age=[%d]\n", json_object["name"], json_object["age"]);							// 错误的输出方式, 因为json_object["xx"]是一个Json::Value类型printf("name=[%s], age=[%d]\n", json_object["name"].asCString(), json_object["age"].asInt());		// 正确的输出方式return true;
}int main()
{Value json_temp;								// 临时对象,供如下代码使用json_temp["name"] = Value("huchao");json_temp["age"] = Value(26);Value root;										// 表示整个 json 对象root["key_string"] = Value("value_string");		// 新建一个 Key(名为:key_string),赋予字符串值:"value_string"。root["key_number"] = Value(12345);				// 新建一个 Key(名为:key_number),赋予数值:12345。root["key_boolean"] = Value(false);				// 新建一个 Key(名为:key_boolean),赋予bool值:false。root["key_double"] = Value(12.345);				// 新建一个 Key(名为:key_double),赋予 double 值:12.345。root["key_object"] = json_temp;					// 新建一个 Key(名为:key_object),赋予 json::Value 对象值。root["key_array"].append("array_string");		// 新建一个 Key(名为:key_array),类型为数组,对第一个元素赋值为字符串:"array_string"。root["key_array"].append(1234);					// 为数组 key_array 赋值,对第二个元素赋值为:1234。ValueType type = root.type();					// 获得 root 的类型,此处为objectValue 类型test_Json_FastWriter(root);test_Json_StyledWriter(root);test_Json_Reader();return 0;
}/*
运行情况:
{"key_array":["array_string",1234],"key_boolean":false,"key_double":12.3450,"key_number":12345,"key_object":{"age":26,"name":"huchao"},"key_string":"v
alue_string"}{
"key_array" : [ "array_string", 1234 ],
"key_boolean" : false,
"key_double" : 12.3450,
"key_number" : 12345,
"key_object" : {
"age" : 26,
"name" : "huchao"
},
"key_string" : "value_string"
}"huchao"							// 自动换行了,不符合预期
26
"huchao"
26
-----------------------------------------------------
huchao								// 手工换行,符合预期
26
huchao, 26
name=[huchao], age=[26]*/



将json的头文件和刚才生成的lib库添加一下(略),生成m.exe,运行即可看到结果!

下面是我的json_app1的属性配置:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react] React怎么判断什么时候重新渲染组件呢

[react] React怎么判断什么时候重新渲染组件呢 componentWillReceiveProps 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Swift入门 新浪微博

##新浪微博 - storyboard 代码 - 项目主体框架: - 主视图控制器 UITabbarController - 包含四个UINavigationController,分别是首页 消息 发现 我 - 特殊之处,UITabbarController中间的加号 - 配置源代码管理工具 SVN or Git or OSChina - 将项目部署到git.oschina.net - 注册…

让Windwos Server 2008 R2 SP1的FTP真正能访问

今天把FTP配置好后&#xff0c;在本机上匿名访问没有问题了&#xff0c;以为万事大吉&#xff0c;于是把需要的文件放入后&#xff0c;到另一台机子上去试试&#xff0c;结果发现出现下面的画面。访问不通&#xff01;什么原因&#xff1f;于是把防火墙完全关闭了&#xff0c;发…

几款用于电能质量测量的芯片

1、ATT7022B ATT7022B 是专用的智能电表计量芯片&#xff0c;ATT7022B 包含六路二阶 sigma-delta ADC、电能质量参数数字信号处理等电路。ATT7022B 可以测量系统的电压、电流、频率、有功功率、无功功率、有功能量、无功能量等参数。ATT7022B 通过 SPI 通信接口进行数据通信。…

[react] 在React中声明组件时组件名的第一个字母必须是大写吗?为什么?

[react] 在React中声明组件时组件名的第一个字母必须是大写吗&#xff1f;为什么&#xff1f; 必须&#xff0c;React根据首字母是否大写来区分react组件还是dom元素 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢…

将Application按钮从任务栏中去掉

SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);转载于:https://www.cnblogs.com/liaj/p/4943352.html

我能够为大家提供什么内容呢?

我能够为大家提供什么内容呢&#xff1f; 这真是一个让我很伤脑筋的问题。在这个内容为王的时代&#xff0c;即使是写自己的博客&#xff0c;如果没有在其中加入好的内容&#xff0c;那还不如不写来得省事&#xff0c;又不占用网站存储空间。 这就好比一个人占着厕所又不拉一个…

Qt 生成bin文件

QFile file("flash_data.bin"); //定义一个文件 file.open(QIODevice::WriteOnly); //打开文件 QDataStream ds(&file); //定义一个数据流 for (int idx 0; idx < 8192; i){ds << (uint8_t)data[i]; //把数组中的数据写到数据…

[react] 在React中组件的state和setState有什么区别?

[react] 在React中组件的state和setState有什么区别&#xff1f; state&#xff1a;初始化状态 setState:对状态进行更新 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前…

LeetCode 79. Word Search

原题链接在这里&#xff1a;https://leetcode.com/problems/word-search/ 题目&#xff1a; Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells…

linux shell 字符串操作(长度,查找,替换)详解

在做shell批处理程序时候&#xff0c;经常会涉及到字符串相关操作。有很多命令语句&#xff0c;如&#xff1a;awk,sed都可以做字符串各种操作。 其实shell内置一系列操作符号&#xff0c;可以达到类似效果&#xff0c;大家知道&#xff0c;使用内部操作符会省略启动外部程序等…

深入浅出UML类图

From: http://www.uml.org.cn/oobject/201211231.asp 在UML 2.0的13种图形中&#xff0c;类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition》&#xff08;《UML精粹&#xff1a;…

lib60870-IEC 60870-5-101 / 104 协议对总查询的处理

1、描述 服务器端使用InterrogationHandler回调函数来处理Interrogation请求。根据QOI&#xff08;询问限定符&#xff09;的值&#xff0c;返回不同的信息对象。对于一个简单的系统&#xff0c;仅处理 总查询 请求就足够了&#xff08;QOI 20&#xff09;。QOI值21-36用于询问…

[react] React16新特性有哪些?

[react] React16新特性有哪些&#xff1f; 1.使用Error Boundary处理错误组件 2.render支持2种新的返回类型(数组、字符串) 3.使用createProtal 将组件渲染到当前组件树之外 4.自定义DOM属性 &#xff1a;把不会识别的属性传递给DOM 5.setState传入null时不会再触发更新 个人…

linux笔记1(创建用户、安装gcc、安装五笔输入法)

linux笔记1(创建用户、安装gcc、安装五笔输入法) linux简说 内核&#xff1a;在计算机启动时载入基本内存&#xff0c;管理一些基本的输入输出&#xff0c;管理一些进程的初始化以及进程之间的调 试。控制硬件的运行。 Shell:系统的命令解释器&#xff0c;用户进程与kernel的桥…

Qt 按钮菜单

settingMenu new QMenu;updateAction new QAction(settingMenu); updateAction->setText("更新");authenAction new QAction(settingMenu); authenAction->setText("认证");aboutAction new QAction(settingMenu); aboutAction->setText(&quo…

[转]使用 LDAP 组或角色限制访问,包含部分单点登录SSO说明

参考&#xff1a;http://www-01.ibm.com/support/knowledgecenter/api/content/SSEP7J_10.2.2/com.ibm.swg.ba.cognos.crn_arch.10.2.2.doc/c_restrict_access_using_ldap_groups_or_roles.html#Restrict_Access_Using_LDAP_Groups_or_Roles?localezh 使用 LDAP 组或角色限制访…

[react] 在React中如何判断点击元素属于哪一个组件?

[react] 在React中如何判断点击元素属于哪一个组件&#xff1f; 首先 import {findDOMNode} from react-dom <div onClick{(e)>{ e.target findDOMNode(this.refs.xxxx) }}> <SubcomPonent ref"xxxx" /> </div> 注意&#xff0c;重点是 findD…

samba加入windows 2003域

1。vi /etc/resolv.conf nameserver 192.168.2.110 &#xff03; linux 加入 windows 2003 域&#xff0c;也要在 Linux 将 DNS 服务器的地址指向 windows 域的 DNS 服务器&#xff0c;默认一般就是域控制器,如果没有在Linux中设置 DNS 服务器地址的话&#xff0c;…