jsoncpp解析json报文测试

       JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。

1、jsoncpp库下载

jsoncpp 是比较出名的 C++ JSON 解析库。在 JSON 官网也是首推的。

下载地址为:https://github.com/open-source-parsers/jsoncpp/tree/0.y.z

2、jsoncpp编译

windows平台

     打开makefiles/vs71/jsoncpp.sln 便可以开始编译

linux平台:

mkdir -p build/debug
cd build/debug
cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" ../..
make

3、jsoncpp 使用详解

      在新的Jsoncpp中 Json::WriterJson::FastWriterJson::Reader 等都被摒弃了,用了新的Json::StreamWriterBuilderJson::CharReaderBuilder代替。

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include "json/json.h"

using namespace std;

bool parseJson(const std::string& info)
{
	if (info.empty())
		return false;

	bool res;
	JSONCPP_STRING errs;
	Json::Value root, lang, mail;
	Json::CharReaderBuilder readerBuilder;

	std::unique_ptr<Json::CharReader> const jsonReader(readerBuilder.newCharReader());
	res = jsonReader->parse(info.c_str(), info.c_str() + info.length(), &root, &errs);
	if (!res || !errs.empty()) {
		std::cout << "parseJson err. " << errs << std::endl;
	}

/******************* 打印JSON报文 *****************************************/

	std::cout << "name: " << root["name"].asString() << std::endl;
	std::cout << "Age: " << root["Age"].asInt() << std::endl;
	
	//第一种数组输出方法
	//std::cout << "addr: " << root["addr"] << std::endl; //全部输出

    //第二种数组输出方法
	lang = root["addr"];
	for (int i = 0; i < lang.size(); ++i)
	{
		std::cout << lang[i] << " ";
	}

	std::cout << "key_array: " << root["key_array"]<< std::endl;
	std::cout << std::endl;


	return true;
}

int main()
{
/*************  生成JSON报文 *************************************/
	std::string jsonStr;
	const char* age;
	Json::Value root;
	Json::Value phone;
	Json::StreamWriterBuilder writerBuilder;
	std::ostringstream oss; //包含#include <sstream>

	root["name"] = "mark";
	root["age"] = 52;
	phone["call"] = "xxxxxx";
	phone["id"] = "11_xxxx";
	root["addr"].append(phone);	// 新建一个key为array,类型为数组,对第一个元素赋值为字符串“arr”
	phone["call"] = "yyyyyy";
	phone["id"] = "11_yyyyy";
	root["addr"].append(phone);	// 新建一个key为array,类型为数组,对第一个元素赋值为字符串“arr”
	root["key_array"].append("array_string");// 新建一个 Key(名为:key_array),类型为数组,对第一个元素赋值为字符串:"array_string"。
	root["key_array"].append(1234);

	//第一种输出方法
	//	cout << root.toStyledString() << endl;		

    //第二种输出方法
    //std::unique_ptr<Json::StreamWriter> jsonWriter(writerBuilder.newStreamWriter());
	//jsonWriter->write(root, &cout);

	 //第三种输出方法
	std::unique_ptr<Json::StreamWriter> jsonWriter(writerBuilder.newStreamWriter());
	jsonWriter->write(root, &oss);
	jsonStr = oss.str();
	cout << jsonStr << endl;			//格式化输出

/*************  JSON报文解析 *************************************/
	parseJson(jsonStr);

	system("pause");
	return 0;
}

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值