❶ 往c++项目里添加jsoncpp
http://www.codeproject.com/Articles/20027/JSON-Spirit-A-C-JSON-Parser-Generator-Implemented
我用的是这个,前提你要知道Boost,都是要自己编译的,因为有些格式或设定跟你程序不一致,会有问题!
❷ jsoncpp阅读文件不正确问题,怎么解决
TO awei114: 我编写WinCE应用程序lib直接加工程文件夹吧我其都加需要设置路径啊直接加入文件json.h #prama comment(lib,json)
已搞定能够编译链接通谢谢各位关注接要往更深处走
❸ 怎么在VS2008里使用jsoncpp
C++要使用JSON来解析数据,一般采用jsoncpp.
下载jsoncpp后,按ReadMe文档的说法是要先安装的,但是安装比较麻烦。然而事实上,我们并不需要安装,就可以直接使用。
方法一:直接拷贝源文件。这个方法比较简单,但不推荐,因为不便于项目管理。
VS2008里新建一个空的控制台程序(用作测试jsoncpp是否可用),名为: TestJSON
解压下载好的文件:jsoncpp-src-0.5.0.tar.gz
将 jsoncpp-src-0.5.0include 目录下的json文件夹拷贝至 TestJSON 工程目录下
将jsoncpp-src-0.5.0srclib_json 目录下的所有.h, .cpp文件全部拷贝至 TestJSON 工程目录下
在VS2008里引入工程目录下刚刚从jsoncpp-src-0.5.0 导入的文件,如图1
在VS2008里新建main.cpp来测试jsoncpp是否可用。代码见文章末尾main.cpp
方法二:使用静态链接库
VS2008里新建一个空的控制台程序(用作测试jsoncpp是否可用),名为: TestJSON
解压下载好的文件:jsoncpp-src-0.5.0.tar.gz
利用VS2008打开jsoncpp-src-0.5.0makefilesvs71目录下的jsoncpp.sln,会出现三个Project:jsontest,lib_json,test_lib_json
在lib_json上 右击-->Properties-->Configuration Properties-->C/C++-->Code Generation,注意右侧的Runtime Library的内容,如图2,看完箭头所指的东西就可以点确定,关掉属性页。
编译lib_json,显示编译成功后,在jsoncpp-src-0.5.0uildvs71debuglib_json目录下会生成一个json_vc71_libmtd.lib,将这个lib拷贝至TestJSON工程目录下。
将jsoncpp-src-0.5.0includejson目录下的所有.h文件拷贝至TestJSON工程目录下,并在工程Header Files引入.
将方法一里的main.cpp添加到工程中,并在工程名上 右击-->Properties-->Configuration Properties-->C/C++-->Code Generation, 将Runtime Library改成图2箭头所示内容。
在工程名上右击-->Properties-->Configuration Properties-->Linker-->Input, 在Additional Dependencies里填写json_vc71_libmtd.lib,然后确定,编译就行了。
/* 测试jsoncpp的使用
*/
#include<iostream>
#include"json/json.h"
usingnamespacestd;
usingnamespaceJson;//json的命名空间
intmain()
{
/*JSONDATAasfollowing://一个json类型的数据
{
"test:5
}*/
stringtest="{"test":5}";//保存上文的json类型的数据
//以下涉及json的操作,将在后文中涉及,此处为简单应用,不解释,你懂的
Readerreader;
Valuevalue;
if(reader.parse(test,value))
{
inti=0;
if(!value["test"].isNull())
{
i=value["test"].asInt();
cout<<i<<endl;
}
}
return0;
}
❹ jsoncpp和rapidjson哪个好用
易用性:rapidjson是全头文件包含的,jsoncpp需要你内置编译或编译成库;但rapidjson的一些接口不全,只提供了一层一层的这种解析方式,不能将某一层一次读出来,实际用的时候,要简单封装一下,不然代码量会很大;
性能:rapidjson的性能是现在所有的c++ json解析库里面最高的,没有之一;
容错性:rapidjson只支持标准的 json 格式,很多人以为这个是缺点,我觉得这个是优点,大家都按照标准做,这是成本最低的;
rapidjson之前是托管在Googe Code上的,现在已迁移到GitHub,地址:miloyip/rapidjson · GitHub
❺ JSON中数组该如何解析呢c++中使用jsoncpp
JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择
JSON的全称为:javaScript Object Notation ,顾名思义,JSON是用于标记javascript对象的,详情参考http://www.json.org/。
本文选择第三方库JsonCpp来解析json,JsonCpp是比较出名的c++解析库,在json官网也是首推的。
JsonCpp简介
JsonCpp主要包含三种类型的class:Value Reader Writer。
jsoncpp中所有对象、类名都在namespace json中,包含json.h即可。
注意: Json::Value只能处理ANSI类型的字符串,如果C++程序使用Unicode编码的,最好加一个Adapt类来适配。
下载和编译
本文运行环境是: Redhat 5.5 + g++version 4.6.1 + GNU Make 3.81 + jsoncpp-0.5.0
下载地址是:http://sourceforge.net/projects/jsoncpp/
解压之后得到jsoncpp-src-0.5.0文件夹,我们只需要jsoncpp的头文件和cpp文件,其中jsonscpp的头文件位于jsoncpp-src-0.5.0includejson,jsoncpp的cpp文件位于jsoncpp-src-0.5.0srclib_json。
这里我列出我们的工作目录:
jsoncpp/ //工作目录
|-- include //头文件根目录
| |-- json //json头文件,对应jsoncpp-src-0.5.0includejson
|-- src //cpp源码文件根目录
|-- json //jsoncpp源码文件,对应jsoncpp-src-0.5.0srclib_json
|-- main.cpp //我们的主函数,调用jsoncpp的示例代码
|-- makefile //makefile,不用我们多说了吧,不懂请看我博客的makefile最佳实践
反序列化Json对象
假设有一个json对象如下:
{ "name": "json″, "array": [ { "cpp": "jsoncpp" }, { "java": "jsoninjava" }, { "php": "support" } ] }
我们要实现这个json的反序列号代码如下:
voidreadJson() { usingnamespacestd; std::stringstrValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}"; Json::Reader reader; Json::Value value; if(reader.parse(strValue, value)) { std::stringout= value["name"].asString(); std::cout <<out<<std::endl; constJson::Value arrayObj = value["array"]; for(unsigned inti = 0;i <arrayObj.size(); i++) { if(!arrayObj[i].isMember("cpp")) continue; out= arrayObj[i]["cpp"].asString(); std::cout <<out; if(i != (arrayObj.size() - 1)) std::cout <<std::endl; } } }
序列化Json对象
voidwriteJson() { usingnamespacestd; Json::Value root; Json::Value arrayObj; Json::Value item; item["cpp"] = "jsoncpp"; item["java"] = "jsoninjava"; item["php"] = "support"; arrayObj.append(item); root["name"] = "json"; root["array"] = arrayObj; root.toStyledString(); std::stringout= root.toStyledString(); std::cout <<out<<std::endl; }
❻ windows 平台怎么编译使用jsoncpp
其实最好还是使用vs,c语言不适合做大型的应用程序,c程序适合做单片机程序和驱动程序。windows程序最好还是使用vc6.0,网页程序使用vs2008,单片机和驱动使用汇编语言。
Visual C++的Windows窗体应用程序可以成.exe文件,也就是应用程序,开发软件可以创建这个项目;如果想写C语言,Visual C++里面自带有编写.cpp文件的C语言环境!
❼ jsoncpp问题
放到你的工程里,相当于你的工程额外多了一个cpp文件,和两个h文件,如果你的工程仅有一个main.cpp,那就是两个cpp和两个h文件,组成了你这个工程。
❽ 怎么将jsoncpp编译成lib文件
比如你在VC6.0有一个工程project,里面有以下3个文件
/*1*/fun.h
#ifndef FUN_H
#define FUN_H
void fun();
#endif
/*2*/fun.c
#include <stdio.h>
#include "fun.h"
void fun()
{
printf("fun()");
}
/*3*/main.c
#include <stdio.h>
#include "fun.h"
int main()
{
fun();
getchar();
}
菜单project->setting->link
把输出文件名“Debug/project.exe”改成“Debug/project.lib”,确定
按F7组建project.lib
这样在你的project\Debug文件夹下就可以找到project.lib了