C++解析json文件-VS2010中配置Jsoncpp

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kekong0713/article/details/52781482
1.准备工作
Jsoncpp下载:https://sourceforge.net/projects/jsoncpp/    版本为v0.5.0

参考网址:


2.配置
解压上面下载的Jsoncpp文件,在jsoncpp-src-0.5.0/makefiles/vs71目录里找到jsoncpp.sln,用VS2010打开。


 关键是要配置运行库属性,由于选择是Debug模式,选择多线程调试(MTD),在新工程中运行库的配置要求要保存一致。


 配置好了之后进行编译生成,debug路径(xxx\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\build\vs71\debug\lib_json)下生成静态链接库json_vc71_libmtd.lib 。如果是release版本则类似。

3.新工程中的使用
先配置项目属性,在包含目录中添加json的include路径,在库目录中添加静态库所在的路径







添加静态链接库



源码:
#include <iostream>
#include <fstream>
#include "json/json.h"
using namespace std;
int main()
{
	Json::Reader reader;
	Json::Value root;
	//从文件中读取
	ifstream is;
	is.open("person.json", ios::binary);
	if(reader.parse(is,root))
	{
		//读取根节点信息
		string name = root["name"].asString();
		int age = root["age"].asInt();
		bool sex_is_male = root["sex_is_male"].asBool();
		cout << "My name is " << name << endl;
		cout << "I'm " << age << " years old" << endl;
		cout << "I'm a " << (sex_is_male ? "man" : "woman") << endl;
		//读取子节点信息
		string partner_name = root["partner"]["partner_name"].asString();
		int partner_age = root["partner"]["partner_age"].asInt();
		bool partner_sex_is_male = root["partner"]["partner_sex_is_male"].asBool();
		cout << "My partner's name is " << partner_name << endl;
		cout << (partner_sex_is_male ? "he" : "she") << " is "
			<< partner_age << " years old" << endl;
		//读取数组信息
		cout << "Here's my achievements:" << endl;
		for(int i = 0; i < root["achievement"].size(); i++)
		{
			string ach = root["achievement"][i].asString();
			cout << ach << '\t';
		}
		cout << endl;
		cout << "Reading Complete!" << endl;
	}
	is.close();
	getchar();
	return 0;
}

person.json文件
{
    "name":"Tsybius",
    "age":23,
    "sex_is_male":true,
    "partner":
    {
        "partner_name":"Galatea",
        "partner_age":21,
        "partner_sex_is_male":false
    },
    "achievement":["ach1","ach2","ach3"]
}

结果



 
展开阅读全文

没有更多推荐了,返回首页