C++提取JSON数据

使用rapidjson包,提取数据集fullString中Body标识的json串:其中json串支持多行。

// test3.cpp : 定义控制台应用程序的入口点。
//

//#include "stdafx.h"
#include "rapidjson/include/document.h"
#include "rapidjson/include/writer.h"
#include "rapidjson/include/stringbuffer.h"
#include "string.h"
#include <iostream>
#include <string>
#include <vector>

using namespace rapidjson;

void parseJSON(const Value& value, std::vector<std::string>& keepstr, std::vector<int>& keepval);

void parseArray(const Value& arr, std::vector<std::string>& keepstr, std::vector<int>& keepval) {
    
    
	for (SizeType i = 0; i < arr.Size(); i++) {
    
    
		parseJSON(arr[i], keepstr, keepval);
	}
}

void parseObject(const Value& obj, std::vector<std::string>& keepstr, std::vector<int>& keepval) {
    
    
	for (Value::ConstMemberIterator itr = obj.MemberBegin(); itr != obj.MemberEnd(); ++itr) {
    
    
		parseJSON(itr->value, keepstr, keepval);
	}
}

// 目前只需要支持获取字符串和int
void parseJSON(const Value& value, std::vector<std::string>& keepstr, std::vector<int>& keepval) {
    
    
	if (value.IsObject()) {
    
    
		parseObject(value, keepstr, keepval);
	} else if (value.IsArray()) {
    
    
		parseArray(value, keepstr, keepval);
	} else if (value.IsString()) {
    
    
		keepstr.push_back(value.GetString());
	} else if (value.IsInt()) {
    
    
		keepval.push_back(value.GetInt());
	}
	// 在这里添加其他数据类型的解析,如Bool、Double等
}


int main()
{
    
    
	std::string fullString = "(Body:'[{\"abroadCustodianCode\":null,\"applyIndustryClass\":null,\"assetFlag\":\"0\",\"assetType\":null,\"bankCreditFlag\":\"1\",\"benchmarkBottom\":null,\"benchmarkTop\":null,\"benefitMode\":\"1\",\"benefitTransferFlag\":\"0\",\"borderTrustFlag\":\"0\",\"businessFeature\":\"2\",\"calendarType\":\"0\",\"cashTrustFlag\":\"0\",\"classFlag\":\"0\",\"cleaningPlan\":null,\"convertFlag\":\"0\",\"cooperationMode\":\"1\",\"cooperationSource\":\"2\",\"createdBy\":\"8888\",\"createdTime\":1705400502000,\"ctrProjectCode\":null,\"curType\":\"156\",\"custodianCode\":null,\"custodianName\":null,\"custodianNo\":null,\"custodianType\":\"0\",\"customRedemptionFlag\":\"0\",\"endDate\":null,\"enhanceCreditFlag\":\"0\",\"enhanceCreditMethod\":null,\"enhanceCreditType\":null,\"entrustType\":\"1\",\"establishCond\":\"22\",\"establishType\":\"2\",\"estimateFrequency\":\"0\",\"expBottomRate\":null,\"expEndDate\":\"20270218\",\"expTopRate\":null,\"expireRegistrationDate\":null,\"faceValue\":1,\"fundSize\":null,\"fundSizeType\":\"0\",\"fundSource\":\"1\",\"fundUtilization\":\"33\",\"greenTrustFlag\":\"0\",\"groupName\":null,\"groupRecommed\":\"0\",\"ifClear\":null,\"infoPublishFlag\":\"1\",\"investArea\":null,\"investIndustry\":\"1\",\"isExtended\":null,\"isPublicTrust\":\"0\",\"isRegiVolBef\":\"0\",\"largeRedem\":null,\"largeRedemFlag\":\"0\",\"largeRedemRate\":null,\"largeRedemType\":null,\"lifeCycle\":null,\"lifeCycleType\":\"0\",\"lifeCycleUnit\":null,\"manageResponType\":null,\"managerCode\":null,\"maxCountAmt\":20000000,\"maxPerNum\":200,\"minOpenPeriod\":null,\"minPerNum\":1,\"minSize\":1,\"monitorClass\":\"1\",\"monitorProjectType\":\"02\",\"motherChildTrust\":\"0\",\"motherTrust\":null,\"netValFlag\":\"1\",\"openFrequency\":\"1\",\"orgid\":\"1016\",\"orgidName\":\"山西信托_信托业务一部\",\"paymodeCode\":null,\"perCountStra\":\"0\",\"perCountType\":\"0\",\"preRegistrationDate\":null,\"priorityInferiorRate\":1,\"productLine1\":\"1\",\"productLine2\":\"3\",\"projectAccount\":\"00000183\",\"projectBrand\":null,\"projectClass\":\"1\",\"projectCode\":\"2024-0001\",\"projectExtTag\":\"0\",\"projectFullname\":\"日月测试1号\",\"projectId\":\"0000000085\",\"projectMode\":\"1\",\"projectModifyDate\":null,\"projectModifyReason\":null,\"projectName\":\"日月1号\",\"projectNature\":\"1\",\"projectOperationMode\":\"1\",\"projectProperty\":\"1.2\",\"projectPy\":null,\"projectRegistrationCode\":null,\"projectStage\":\"0\",\"projectStatus\":\"5\",\"projectStructured\":\"1\",\"projectTerm\":null,\"propertyNameTrust\":\"0\",\"publishFrequency\":\"0\",\"raiseBeginDate\":null,\"raiseEndDate\":null,\"raiseType\":\"1\",\"rate\":null,\"rateType\":\"0\",\"ratingFlag\":\"0\",\"ratingSituation\":null,\"recodeBenchmark\":\"0\",\"referralSite\":\"33\",\"reportFrequency\":\"0\",\"rewardProvision\":\"1\",\"rewardRate\":null,\"riskMitigationType\":null,\"saleType\":[\"1\"],\"scopeInvestment\":null,\"seniorManagerCode\":\"3333\",\"singleSet\":\"1\",\"splitTransferNature\":\"0\",\"spvCode\":null,\"startDate\":\"20240105\",\"taNo\":\"XD\",\"termFlag\":\"0\",\"terminationFlag\":\"0\",\"totFlag\":\"0\",\"totInvest\":null,\"trustApplyProperty\":\"5\",\"trustFuncType\":\"1\",\"trustManagerA\":\"1008\",\"trustManagerAName\":\"刘凌鹏\",\"trustManagerB\":null,\"trustManagerBName\":null,\"trustManagerCode\":\"2223\",\"trustRegulatory\":\"33334\",\"trustReward\":null,\"umbrellaFlag\":\"0\",\"updatedBy\":\"8888\",\"updatedTime\":1708913899000,\"userIdList\":{\"userIdList\":[{\"USER_ID\":1035},{\"USER_ID\":1036},{\"USER_ID\":1123},{\"USER_ID\":1128},{\"USER_ID\":1131},{\"USER_ID\":8888}]}},{\"abroadCustodianCode\":null,\"applyIndustryClass\":null,\"assetFlag\":\"0\",\"assetType\":null,\"bankCreditFlag\":null,\"benchmarkBottom\":null,\"benchmarkTop\":null,\"benefitMode\":\"1\",\"benefitTransferFlag\":\"0\",\"borderTrustFlag\":\"0\",\"businessFeature\":\"1\",\"calendarType\":\"0\",\"cashTrustFlag\":\"0\",\"classFlag\":\"0\",\"cleaningPlan\":null,\"convertFlag\":\"0\",\"cooperationMode\":\"1\",\"cooperationSource\":\"1\",\"createdBy\":\"8888\",\"createdTime\":1705456526000,\"ctrProjectCode\":null,\"curType\":\"156\",\"custodianCode\":null,\"custodianName\":null,\"custodianNo\":null,\"custodianType\":\"0\",\"customRedemptionFlag\":\"0\",\"endDate\":null,\"enhanceCreditFlag\":\"0\",\"enhanceCreditMethod\":null,\"enhanceCreditType\":null,\"entrustType\":\"1\",\"establishCond\":\"2\",\"establishType\":\"1\",\"estimateFrequency\":\"0\",\"expBottomRate\":null,\"expEndDate\":\"20280316\",\"expTopRate\":null,\"expireRegistrationDate\":null,\"faceValue\":1,\"fundSize\":null,\"fundSizeType\":\"0\",\"fundSource\":\"1\",\"fundUtilization\":\"3\",\"greenTrustFlag\":\"0\",\"groupName\":null,\"groupRecommed\":\"0\",\"ifClear\":null,\"infoPublishFlag\":\"0\",\"investArea\":null,\"investIndustry\":\"1\",\"isExtended\":null,\"isPublicTrust\":\"0\",\"isRegiVolBef\":\"0\",\"largeRedem\":null,\"largeRedemFlag\":\"0\",\"largeRedemRate\":null,\"largeRedemType\":null,\"lifeCycle\":null,\"lifeCycleType\":\"0\",\"lifeCycleUnit\":null,\"manageResponType\":null,\"managerCode\":null,\"maxCountAmt\":111,\"maxPerNum\":11111,\"minOpenPeriod\":null,\"minPerNum\":1,\"minSize\":11111,\"monitorClass\":\"1\",\"monitorProjectType\":\"04\",\"motherChildTrust\":\"0\",\"motherTrust\":null,\"netValFlag\":\"0\",\"openFrequency\":\"0\",\"orgid\":\"1016\",\"orgidName\":\"山西信托_信托业务一部\",\"paymodeCode\":null,\"perCountStra\":\"0\",\"perCountType\":\"0\",\"preRegistrationDate\":null,\"priorityInferiorRate\":2,\"productLine1\":\"0\",\"productLine2\":\"0\",\"projectAccount\":\"00000184\",\"projectBrand\":null,\"projectClass\":\"1\",\"projectCode\":\"2024-0002\",\"projectExtTag\":null,\"projectFullname\":\"测试日月2号\",\"projectId\":\"0000000086\",\"projectMode\":\"1\",\"projectModifyDate\":null,\"projectModifyReason\":null,\"projectName\":\"日月2号\",\"projectNature\":\"1\",\"projectOperationMode\":\"0\",\"projectProperty\":\"2.3.3\",\"projectPy\":null,\"projectRegistrationCode\":null,\"projectStage\":\"0\",\"projectStatus\":\"5\",\"projectStructured\":\"1\",\"projectTerm\":null,\"propertyNameTrust\":\"0\",\"publishFrequency\":\"0\",\"raiseBeginDate\":null,\"raiseEndDate\":null,\"raiseType\":\"1\",\"rate\":null,\"rateType\":\"0\",\"ratingFlag\":\"0\",\"ratingSituation\":null,\"recodeBenchmark\":\"0\",\"referralSite\":\"44\",\"reportFrequency\":\"0\",\"rewardProvision\":\"1\",\"rewardRate\":null,\"riskMitigationType\":null,\"saleType\":[\"1\"],\"scopeInvestment\":\"1\",\"seniorManagerCode\":\"44\",\"singleSet\":\"1\",\"splitTransferNature\":\"0\",\"spvCode\":null,\"startDate\":\"20240118\",\"taNo\":\"XD\",\"termFlag\":\"0\",\"terminationFlag\":\"0\",\"totFlag\":\"0\",\"totInvest\":null,\"trustApplyProperty\":\"1\",\"trustFuncType\":\"1\",\"trustManagerA\":\"1002\",\"trustManagerAName\":\"雷淑俊\",\"trustManagerB\":null,\"trustManagerBName\":null,\"trustManagerCode\":\"33\",\"trustRegulatory\":null,\"trustReward\":null,\"umbrellaFlag\":\"0\",\"updatedBy\":\"8888\",\"updatedTime\":1709798964000,\"userIdList\":{\"userIdList\":[{\"USER_ID\":1035},{\"USER_ID\":1036},{\"USER_ID\":1123},{\"USER_ID\":1128},{\"USER_ID\":1131},{\"USER_ID\":8888}]}},{\"abroadCustodianCode\":null,\"applyIndustryClass\":null,\"assetFlag\":\"0\",\"assetType\":null,\"bankCreditFlag\":null,\"benchmarkBottom\":null,\"benchmarkTop\":null,\"benefitMode\":\"1\",\"benefitTransferFlag\":\"1\",\"borderTrustFlag\":\"0\",\"businessFeature\":\"2\",\"calendarType\":\"0\",\"cashTrustFlag\":\"0\",\"classFlag\":\"0\",\"cleaningPlan\":null,\"convertFlag\":\"0\",\"cooperationMode\":\"1\",\"cooperationSource\":\"2\",\"createdBy\":\"8888\",\"createdTime\":1708926371000,\"ctrProjectCode\":null,\"curType\":\"156\",\"custodianCode\":null,\"custodianName\":null,\"custodianNo\":null,\"custodianType\":\"0\",\"customRedemptionFlag\":\"0\",\"endDate\":null,\"enhanceCreditFlag\":\"1\",\"enhanceCreditMethod\":\"1\",\"enhanceCreditType\":\"2\",\"entrustType\":\"1\",\"establishCond\":\"3\",\"establishType\":\"1\",\"estimateFrequency\":\"0\",\"expBottomRate\":null,\"expEndDate\":\"20270224\",\"expTopRate\":null,\"expireRegistrationDate\":null,\"faceValue\":1,\"fundSize\":null,\"fundSizeType\":\"0\",\"fundSource\":\"6\",\"fundUtilization\":\"44\",\"greenTrustFlag\":\"0\",\"groupName\":null,\"groupRecommed\":\"0\",\"ifClear\":null,\"infoPublishFlag\":\"1\",\"investArea\":null,\"investIndustry\":\"2\",\"isExtended\":null,\"isPublicTrust\":\"1\",\"isRegiVolBef\":\"0\",\"largeRedem\":null,\"largeRedemFlag\":\"0\",\"largeRedemRate\":null,\"largeRedemType\":null,\"lifeCycle\":null,\"lifeCycleType\":\"0\",\"lifeCycleUnit\":null,\"manageResponType\":null,\"managerCode\":null,\"maxCountAmt\":3333,\"maxPerNum\":122,\"minOpenPeriod\":null,\"minPerNum\":1,\"minSize\":2,\"monitorClass\":\"1\",\"monitorProjectType\":\"06\",\"motherChildTrust\":\"0\",\"motherTrust\":null,\"netValFlag\":\"0\",\"openFrequency\":\"1\",\"orgid\":\"1016\",\"orgidName\":\"山西信托_信托业务一部\",\"paymodeCode\":null,\"perCountStra\":\"0\",\"perCountType\":\"0\",\"preRegistrationDate\":null,\"priorityInferiorRate\":1,\"productLine1\":\"0\",\"productLine2\":\"0\",\"projectAccount\":\"00000188\",\"projectBrand\":null,\"projectClass\":\"1\",\"projectCode\":\"2024-0005\",\"projectExtTag\":null,\"projectFullname\":\"日月4号测试项目\",\"projectId\":\"0000000088\",\"projectMode\":\"1\",\"projectModifyDate\":null,\"projectModifyReason\":null,\"projectName\":\"日月4号\",\"projectNature\":\"1\",\"projectOperationMode\":\"1\",\"projectProperty\":\"2.1\",\"projectPy\":null,\"projectRegistrationCode\":null,\"projectStage\":\"0\",\"projectStatus\":\"5\",\"projectStructured\":\"1\",\"projectTerm\":null,\"propertyNameTrust\":\"1\",\"publishFrequency\":\"0\",\"raiseBeginDate\":null,\"raiseEndDate\":null,\"raiseType\":\"1\",\"rate\":null,\"rateType\":\"0\",\"ratingFlag\":\"0\",\"ratingSituation\":null,\"recodeBenchmark\":\"0\",\"referralSite\":\"3\",\"reportFrequency\":\"0\",\"rewardProvision\":\"1\",\"rewardRate\":null,\"riskMitigationType\":null,\"saleType\":[\"1\"],\"scopeInvestment\":\"1\",\"seniorManagerCode\":\"55\",\"singleSet\":\"1\",\"splitTransferNature\":\"0\",\"spvCode\":null,\"startDate\":\"20240105\",\"taNo\":\"XD\",\"termFlag\":\"0\",\"terminationFlag\":\"0\",\"totFlag\":\"0\",\"totInvest\":null,\"trustApplyProperty\":\"1\",\"trustFuncType\":\"2\",\"trustManagerA\":\"1123\",\"trustManagerAName\":\"张浩慧\",\"trustManagerB\":null,\"trustManagerBName\":null,\"trustManagerCode\":\"44\",\"trustRegulatory\":null,\"trustReward\":null,\"umbrellaFlag\":\"0\",\"updatedBy\":\"8888\",\"updatedTime\":1709798962000,\"userIdList\":{\"userIdList\":[{\"USER_ID\":1035},{\"USER_ID\":1036},{\"USER_ID\":1123},{\"USER_ID\":1128},{\"USER_ID\":1131},{\"USER_ID\":8888}]}}]' MessageProperties [headers={}, contentType=text/plain, contentEncoding=UTF-8, contentLength=9402, deliveryMode=PERSISTENT, expiration=259200000, priority=0, deliveryTag=0])";
	// 查找 "Body:'" 的位置
	size_t startPos = fullString.find("Body:'");
	if (startPos == std::string::npos) {
    
    
		std::cout << "未找到起始位置" << std::endl;
		return 1;
	}

	// 在起始位置后面继续查找 "MessageProperties" 的位置
	size_t endPos = fullString.find("' MessageProperties", startPos+6);
	if (endPos == std::string::npos) {
    
    
		std::cout << "未找到结束位置" << std::endl;
		return 1;
	}

	// 截取子字符串
	std::string extractedString = fullString.substr(startPos+6, endPos - startPos-6);

	Document document;
	document.Parse(extractedString.c_str());

	std::vector<std::string> vecKeepstr;
	std::vector<int>    veckeepval;

	if (document.IsArray()) {
    
    
		// parseArray(document);
		for (SizeType i = 0; i < document.Size(); i++) {
    
    
			const Value& obj = document[i];
			if (obj.HasMember("projectCode") && obj["projectCode"].IsString()) {
    
    
					const char* projectCode = obj["projectCode"].GetString();
					printf("projectCode: %s\n", projectCode);
			}

			if (obj.HasMember("orgid") && obj["orgid"].IsString()) {
    
    
				const char* orgid = obj["orgid"].GetString();
				printf("orgid: %s\n", orgid);
			}

			// 获取整数值
			if (obj.HasMember("expEndDate") && obj["expEndDate"].IsString()) {
    
    
				int intValue = atoi(obj["expEndDate"].GetString());
				std::cout << "Integer value: " << intValue << std::endl;
			}

			 获取浮点数值
			if (obj.HasMember("projectProperty") && obj["projectProperty"].IsString()) {
    
    
				double projectProperty = atof(obj["projectProperty"].GetString());
				std::cout << "Double value: " << projectProperty << std::endl;
			}

			// 取对象列表
			if (obj.HasMember("userIdList") && obj.IsObject()) {
    
    
				parseObject(obj["userIdList"], vecKeepstr, veckeepval);
				std::cout<<"userIdList:"<<" ";
				for(int i = 0; i < veckeepval.size(); i++){
    
    
					std::cout<<veckeepval[i]<<" ";
				}
				printf("\n");
			}
			printf("\n\n");
		}
	}

	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/hzx5200693/article/details/136745474