首先去GitHub下载JSONCPP的源码:
JSonCpp的源码
解压后得到:jsoncpp-master 文件夹
需要的是:jsoncpp-master\src\lib_json 目录下的所有文件和 jsoncpp-master\include\json 目录下的所有文件,在MFC工程目录下新建两个文件夹或者把jsoncpp-master文件夹下的这两个文件夹复制进自己的工程源码目录下。
例如这样:
在VS解决方案视图下新建一个筛选器,其实就是新建一个文件夹或者说一个分类:
把 jsoncpp-master\src\lib_json 目录下的文件添加进这个筛选器里:
为了避免报错需要设置一下这里头的.cpp文件,不用预编译头。例如在json_value.cpp上面右键→属性→配置属性→C/C++→预编译头→不使用预编译头
把这3个.cpp文件全设置一遍,然后再设置项目的包含目录,把你工程源码目录下复制过去的jsoncpp-master\include\json 文件夹包含进去。
在鄙人这里是这个目录:
然后在需要使用的.cpp目录下引入Json的.h文件:
#include "include/json/json.h"
在鄙人这是这个路径,如果创建的文件夹是其他名字需要酌情修改。
下面是如何使用的例子:
JSON原本长这样:
{"id":1,"Name":"春哥","Address":[{"City":"青青草原","作战地点":"狼堡"},{"City":"狗熊岭","作战地点":"熊洞"}]};
Json::Reader reader;
Json::Value jsonObj;
std::string strValue = "{ \"id\":1,\"Name\" : \"春哥\",\"Address\" : [{\"City\":\"青青草原\",\"作战地点\" : \"狼堡\"},{\"City\":\"狗熊岭\",\"作战地点\" : \"熊洞\"}] }";
if (reader.parse(strValue, jsonObj))
{
int id = jsonObj["id"].asUInt();//简化的写法 读取json中的id属性
Json::Value inatin = jsonObj["id"]; //读取json中的id属性
id =inatin.asUInt();//标准写法
estion.Format(L"ID:%d\n", id);
WriteConsole(hdlWrite, estion, CString(estion).GetLength(), NULL, NULL); //向DOS窗口里输出字符串
Json::Value timen = jsonObj["Address"];//读取json中的数组
int nderop =timen.size();//获取数组长度
for (int i = 0; i < nderop; i++)
{
generd =timen[i]["City"].asCString(); //读取数组中的元素
generd = L"所在地:"+generd + L"\n";
WriteConsole(hdlWrite, generd, CString(generd).GetLength(), NULL, NULL); //向DOS窗口里输出字符串
generd = timen[i]["作战地点"].asCString(); //读取数组中的元素
generd = L"作战地点:" + generd + L"\n";
WriteConsole(hdlWrite, generd, CString(generd).GetLength(), NULL, NULL); //向DOS窗口里输出字符串
}
}
读取的结果: