VS2010中使用JSONCPP方法

 

下载jsoncpp后,按ReadMe文档的说法是要先安装的,但是安装比较麻烦。然而事实上,我们并不需要安装,就可以直接使用。

方法一:直接拷贝源文件。这个方法比较简单,但不推荐,因为不便于项目管理。

  1. VS2010里新建一个空的控制台程序(用作测试jsoncpp是否可用),名为: TestJSON
  2. 解压下载好的文件:jsoncpp-src-0.5.0.tar.gz
  3. 将 jsoncpp-src-0.5.0\include 目录下的json文件夹拷贝至 TestJSON 工程目录下
  4. 将 jsoncpp-src-0.5.0\src\lib_json 目录下的所有.h, .cpp 文件全部拷贝至 TestJSON 工程目录下
  5. 在VS201里引入工程目录下刚刚从 jsoncpp-src-0.5.0 导入的文件,如图1
  6. 在VS2010里新建main.cpp来测试jsoncpp是否可用。代码见文章末尾main.cpp

方法二:使用静态链接库

  1. VS2010里新建一个空的控制台程序(用作测试jsoncpp是否可用),名为: TestJSON
  2. 解压下载好的文件:jsoncpp-src-0.5.0.tar.gz
  3. 利用VS2010打开jsoncpp-src-0.5.0\makefiles\vs71目录下的jsoncpp.sln,会出现三个Project:jsontest, lib_json, test_lib_json
  4. 在lib_json上 右击-->Properties-->Configuration Properties-->C/C++-->Code Generation,注意右侧的Runtime Library的内容,如图2,看完箭头所指的东西就可以点确定,关掉属性页。
  5. 编译lib_json,显示编译成功后,在jsoncpp-src-0.5.0\build\vs71\debug\lib_json目录下会生成一个json_vc71_libmtd.lib,将这个lib拷贝至TestJSON工程目录下。
  6. 将jsoncpp-src-0.5.0\include\json目录下的所有.h文件拷贝至TestJSON工程目录下,并在工程Header Files引入.
  7. 将方法一里的main.cpp添加到工程中,并在工程名上 右击-->Properties-->Configuration Properties-->C/C++-->Code Generation, 将Runtime Library改成图2箭头所示内容。
  8. 在工程名上 右击-->Properties-->Configuration Properties-->Linker-->Input, 在Additional Dependencies里填写json_vc71_libmtd.lib,然后确定,编译就行了。

图1:

图2:

 

//测试DEMO

#include <iostream>
#include <string>
#include "json\json.h"

int main(void)
{
	std::string strValue="{\"key1\":\"value1\",\"array\":[{\"key2\":\"value2\"},{\"key2\":\"value3\"},{\"key2\":\"value4\"}]}";
	Json::Reader reader;//json解析
	Json::Value value;//表示一个json格式的对象

	if(reader.parse(strValue,value))//解析出json放到json中区
	{
		std::string out=value["key1"].asString();
		std::cout<<out<<std::endl;
		const Json::Value arrayObj=value["array"];//迭代器
        for (int i=0; i < arrayObj.size();i++)
		{
			out=arrayObj[i]["key2"].asString();
			std::cout<<out;
			if(i!=arrayObj.size()-1)
				std::cout<<std::endl;;
		}
	}

	getchar();
	return 0;
}

 

 

再来一个源码

#include <iostream>
#include <string>
#include "json\json.h"

int main(void)
{
	//解析Json的方法
	Json::Value root;//表示一个json格式的对象
	Json::Value arrayObj;
	Json::Value item;

	for(int i=0;i<10;i++)
	{
		item["key"]=i;
		arrayObj.append(item);
	}
	root["key1"]="value1";
	root["key2"]="value2";
	root["array"]=arrayObj;

	std::string out=root.toStyledString();
	std::cout<<out<<std::endl;

	getchar();
	return 0;
}

 

 

输出结果分别是:

DEMO1:

value1
value2
value3
value4

DEMO2:

{
   "array" : [
      {
         "key" : 0
      },
      {
         "key" : 1
      },
      {
         "key" : 2
      },
      {
         "key" : 3
      },
      {
         "key" : 4
      },
      {
         "key" : 5
      },
      {
         "key" : 6
      },
      {
         "key" : 7
      },
      {
         "key" : 8
      },
      {
         "key" : 9
      }
   ],
   "key1" : "value1",
   "key2" : "value2"
}
源码下载:http://download.csdn.net/detail/opzoonzhuzhengke/3728120

时间: 2024-11-03 22:21:00

VS2010中使用JSONCPP方法的相关文章

在VS2010中打开vs2012项目的方法

VS2012中对C#的支持度非常好,不管是编写方便程度(不需要插件就能高亮代码及代码自动提示功能),还对MFC的一些功能优化很多 我们可以修改两个工程文件来把VS2012的工程文件一直到VS2010中去. 首先当然是修改解决方案文件(.sln文件). 使用记事本打开,把里面的 Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2012 改成 Microsoft Visual Studio Sol

VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法

原文:VS2010中,无法嵌入互操作类型"--",请改用适用的接口的解决方法   1.提示:在VS2010,在引用COM组件的时候,出现了无法嵌入互操作类型"--",请改用适用的接口的错误提示. 2.解决方案: 选中项目中引入的dll,鼠标右键,选择属性,把"嵌入互操作类型"设置为False.   例如: MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass(); 提示无法嵌入互操作类型MSXML2.

在vs2010中,输出当前文件路径与源文件当前行号的解决方法_C 语言

看到一道题目:vs2010中,如何输出当前文件路径和源文件当前行号.不知道,于是立刻上网搜,于是找到了答案:总结一下,有用的时候就直接拿来用了,据说它们是系统预定义宏,但这种宏并不是在某个文件中定义的,而是由编译器定义的. 复制代码 代码如下:  cout << __LINE__ << endl;  //输出语句所在的行号 cout << __FILE__  << endl; //输出文件名(包括路径) cout << __TIME__ <

C# VS2010中,用微软自带的System.Data.OracleClient来连接Oracle数据库

由于微软在.Net框架4.0中已经决定撤销使用System.Data.OracleClient,造成在VS2010中无法连接Oracle数据库,但它还依旧存在于.Net架构中,我们可以通过自己引用  C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.OracleClient.dll 来获得对Oracle数据库的支持. 方法: 1.在VS2010中打开[解决方案管理器]--右击[引用]--[添加引用]   2.选择[浏览]找到"C:

ArcEngine10在VS2010中编译问题

原文 http://www.gisall.com/html/47/122747-4141.html 问题描述:          前段时间装了个VS2010,用ArcEngine10在VS2010中基于.Net Framework 3.5新建一个MapControl Application工程,创建过程如下: 1. Start Visual Studios 2010.2. Select New Project-.3. Expand ArcGIS->Extending ArcObjects and

控件-在vs2010中实现雷达信号轨迹追踪

问题描述 在vs2010中实现雷达信号轨迹追踪 雷达上显示一些不同的目标,目标新的位置是红色显示的(这个本来就实现了)现在想把以前的位置想要保持住,然后把历史位置更改为其他颜色显示,最后能看出目标的移动轨迹,信号从网口发过来,然后在TEECHART控件中每隔100ms绘制一次目标的新位置,这个有什么思路.绘制函数在定时器中实现的,接收数据是一个单独函数. 解决方案 思路没有什么问题,需要注意界面刷新的实现过程(100ms刷新一次需要防闪屏现象),与如何指示出"能看出目标的移动轨迹" 解

32位-vs2010中使用#define _USE_32BIT_TIME_T无效

问题描述 vs2010中使用#define _USE_32BIT_TIME_T无效 如题,最近在看各种关于c++的资料,无意中发现**time__t**类型在VS2005之前是32位,于是我试着让现在已是64位的**time__t**使用原来的32位格式.查完各种资料,据说在文件头加上**#define USE_32BIT_TIME_T**就行,但是我在我写的.cpp文件头上加上这句话,使用**sizeof(time_t)**,竟然还是8而不是4,请问这个是为什么? 以下是程序最上面的那部分:

在VS2010中调试VSTO程序,通过Assembly.GetExecutingAssembly().CodeBase获得的路径有问题

问题描述 在VS2010中调试VSTO程序时,在程序中使用Assembly.GetExecutingAssembly().CodeBase获得程序集的位置.我觉得用VS调试,获得的位置应该是在程序代码的Debug或Release文件夹下,可是实际调试时,获得地址是C盘下的路径(就是类似于使用clickonce发布时的安装路径),C:/Users/usename/AppData/Local/Apps/2.0/01OC72D0.53M/8ENDZTHT.3GD/bigd..vsto_15dc3526

WIN7 64位操作系统,Oracle.DataAccess在VS2010中正常,到了IIS就不正常了

问题描述 如题,IIS中没有启用32位程序,因为一启动,页面运行就导致应用程序池停止oracle.dataaccess版本为2.112.3.0数据库用的oracle11 解决方案 解决方案二:列出异常信息,否则就靠报错来猜测啊?解决方案三:oracle11的ODP.NET版本为4.112.3.0吧?解决方案四:引用1楼starfd的回复: 列出异常信息,否则就靠报错来猜测啊? 能加载文件或程序集"Oracle.DataAccess"或它的某一个依赖项.试图加载格式不正确的程序.说明:执