Esempio n. 1
0
void CjsonA::LoadOneModule(string strName,string strValue,BOOL flag){
	//如果找到了一个字段
	if(flag == 1){
		CstrValue strValueTemp = strValue;
		if(strValueTemp.type == -1){
			mapError[strValue] = "不可识别的字段值";
		}
		mapdata[strName] = (Cjson)strValueTemp;
	}
	//如果找到了一个数组
	if(flag == 2){
		CszValue szValueTemp = strValue;
		mapdata[strName] = szValueTemp;
		if(szValueTemp.mapszError.size() != 0){
			auto it = szValueTemp.mapszError.begin();
			for(;it != szValueTemp.mapszError.end();it++){
				mapError[it->first] = it->second;
			}
		}
	}
	//如果找到了一个json
	if(flag == 3){
		CjsonA jsonTemp;
		map<string,string> mapJsonError = jsonTemp.LoadJson(strValue);
		mapdata[strName] = jsonTemp;

		if(mapJsonError.size() != 0){
			auto it = mapJsonError.begin();
			for(;it != mapJsonError.end();it++){
				mapError[it->first] = it->second;
			}
		}
	}
}
Esempio n. 2
0
string CjsonA::AddTypeValue(string strResult,int *nInsert,BOOL ifFirst,string strField,Cjson TypeValue,string NewLineSign,string FormatSign,int FormatLength){
	int length = FormatLength;
	string strFormatSign = "";
	while(length--!=0){
		strFormatSign = strFormatSign + FormatSign;
	}
	string strOne = strFormatSign + "\"" + strField + "\"";
	if(TypeValue.type == "class CstrValue"){
		CstrValue strValueTemp = TypeValue.toValue();
		//字符串
		if(strValueTemp.type == 1){
			strOne = strOne + " : \"" + strValueTemp.strValue + "\"";
		}
		//整数和小数
		if(strValueTemp.type == 2 || strValueTemp.type == 3){
			strOne = strOne + " : " + strValueTemp.strValue;
		}
	}
	if(TypeValue.type == "class CszValue"){
		CszValue szValue = TypeValue.tosz();
		string strszValue = "";
		int i = -1;
		while(i++ != szValue.size() - 1){
			if(i != 0) strszValue = strszValue + ",";
			Cjson TypeValueTemp = szValue.vecszValue.at(i);
			if(TypeValueTemp.type == "class CstrValue"){
				CstrValue strValueTemp = TypeValueTemp.toValue();
				//字符串
				if(strValueTemp.type == 1){
					strszValue = strszValue + "\"" + strValueTemp.strValue + "\"";
				}
				//整数和小数
				if(strValueTemp.type == 2 || strValueTemp.type == 3){
					strszValue = strszValue + strValueTemp.strValue;
				}
			}
			if(TypeValueTemp.type == "class CjsonA"){
				CjsonA jsonTemp = TypeValueTemp.toJson();
				string strResultTemp = jsonTemp.tostring(NewLineSign,FormatSign,FormatLength + 1);
				strszValue = strszValue + strResultTemp;
			}
		}
		strOne = strOne + " : [" + strszValue + "]";//空数组
	}
	if(TypeValue.type == "class CjsonA"){
		CjsonA jsonTemp = TypeValue.toJson();
		string strResultTemp = jsonTemp.tostring(NewLineSign,FormatSign,FormatLength + 1);
		strOne = strOne + " : " + strResultTemp;
	}
	if(ifFirst == 1){
		strOne = NewLineSign + strOne;
	}
	else{
		strOne = "," + NewLineSign + strOne;
	}
	CStringManager::Insert(strResult,*nInsert,strOne);
	*nInsert = *nInsert + CStringManager::GetLength(strOne);
	return strResult;
}
Esempio n. 3
0
CszValue::CszValue(string strValue){
	int num = 0;
	int begin = 0;
	int i = -1;
	while(1){
		i++;
		//如果到了末尾先取出最后一个再退出
		if(strValue[i] == 0){
			//由于在数组中只会出现json和值,出现json时,在下面的循环中遇到0退出,所以这里只要处理遇到逗号的情况
			string strTemp = CStringManager::Mid(strValue,begin,i - begin);
			string strEmpty = strTemp;
			CStringManager::Replace(strEmpty,"\t", "");
			CStringManager::Replace(strEmpty,"\r\n", "");
			CStringManager::Replace(strEmpty,"\n", "");
			CStringManager::Replace(strEmpty," ", "");
			//说明是空数组
			if(strEmpty == "") break;
			//如果不是空数组则开始传入CstrValue分析
			CstrValue strValueTemp = strTemp;
			if(strValueTemp.type == -1){
				mapszError[strTemp] = "不可识别的数组值";
			}
			vecszValue.push_back(strValueTemp);
			break;
		}
		//如果先找到了逗号说明遇到了一个字段值
		if(strValue[i] == ','){
			CstrValue strValueTemp = CStringManager::Mid(strValue,begin, i - begin);
			if(strValueTemp.type == -1){
				mapszError[CStringManager::Mid(strValue,begin, i - begin)] = "不可识别的数组值";
			}
			vecszValue.push_back(strValueTemp);
			num++;
			//取逗号后的位置作为开始,因为i会在循环开始做++,所以不需要动
			begin = i + 1;
		}
		//如果找到了一个{说明找到了一个json
		if(strValue[i] == '{'){
			string strValueTemp = CStringManager::Mid(strValue,0, i);
			int nPre = CStringManager::ReserveFind(strValueTemp,',');
			strValueTemp = CStringManager::Mid(strValueTemp,nPre + 1, i - nPre - 1);
			CStringManager::Replace(strValueTemp,"\t", "");
			CStringManager::Replace(strValueTemp,"\r\n", "");
			CStringManager::Replace(strValueTemp,"\n", "");
			CStringManager::Replace(strValueTemp," ", "");
			if (strValueTemp != "") mapszError[CStringManager::Mid(strValue,nPre + 1, i - nPre - 1)] = "在数组中json元素前有多余字符";

			CStringManager manager = strValue;
			int nRight = manager.FindOther('{','}',i);
			if(nRight == -1) mapszError[strValue] = "{}不匹配";
			CjsonA json;
			map<string, string> mapJsonError = json.LoadJson(CStringManager::Mid(strValue,i, nRight - i + 1));

			if(mapJsonError.size() != 0){
				auto it = mapJsonError.begin();
				for(;it != mapJsonError.end();it++){
					mapszError[it->first] = it->second;
				}
			}

			vecszValue.push_back(json);
			num++;
			//取逗号后的位置作为开始
			while(1){
				//防止在结束时,因为没找到逗号导致i还是原来左括号的位置,先把i放到右括号的位置,循环开始的时候会做++,寻找下一位
				i = nRight;
				nRight++;
				if(strValue[nRight] == 0) return;
				if(strValue[nRight] == '\t' || (strValue[nRight] == '\r' && strValue[nRight + 1] == '\n') || strValue[nRight] == '\n' || strValue[nRight] == ' ') continue;
				else if(strValue[nRight] == ','){
					begin = nRight + 1;
					//i现在取逗号的位置,循环开始的时候会先做++
					i = nRight;
					break;
				}
				else mapszError[strValue] = "数组中的json后有多余字符";
			}
		}
	}
}