jsoncpp类型检查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiongya8888/article/details/84928004

在使用jsoncpp解析json时,一般要做类型检查,下面是这些检查函数对各种类型的测试结果。

void testJsonCpp(const std::string &document,const char *key)
{
	Json::CharReaderBuilder builder;
	Json::CharReaderBuilder::strictMode(&builder.settings_);
	Json::CharReader *reader = builder.newCharReader();
	Json::Value root;
	std::cout << "document=" << document << std::endl;
	if (!reader->parse(document.c_str(), document.c_str() + document.size(), &root, nullptr)) {
		std::cout << "parse failed" << std::endl;
	}
	std::cout << "root[\"" << key << "\"]." << "isMember=" << (root.isMember(key) ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isNull=" << (root[key].isNull() ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isString=" << (root[key].isString() ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isObject=" << (root[key].isObject() ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isArray=" << (root[key].isArray() ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isNumeric=" << (root[key].isNumeric() ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isBool=" << (root[key].isBool() ? "true" : "false") << std::endl;
	

	std::cout << "root[\"" << key << "\"]." << "isConvertibleTostringValue=" << (root[key].isConvertibleTo(Json::stringValue) ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isConvertibleToobjectValue=" << (root[key].isConvertibleTo(Json::objectValue) ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isConvertibleToarrayValue=" << (root[key].isConvertibleTo(Json::arrayValue) ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isConvertibleTonullValue=" << (root[key].isConvertibleTo(Json::nullValue) ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isConvertibleTobooleanValue=" << (root[key].isConvertibleTo(Json::booleanValue) ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isConvertibleTorealValue=" << (root[key].isConvertibleTo(Json::realValue) ? "true" : "false") << std::endl;
	std::cout << "root[\"" << key << "\"]." << "isConvertibleTointValue=" << (root[key].isConvertibleTo(Json::intValue) ? "true" : "false") << std::endl;

}

int main()
{
	testJsonCpp("{testKey:1111}", "testKey");
	testJsonCpp("{\"testKey\":}", "testKey");
	testJsonCpp("{\"testKey\":null}", "testKey");
	testJsonCpp("{\"testKey\":false}", "testKey");
	testJsonCpp("{\"testKey\":abcdef}", "testKey");
	testJsonCpp("{\"testKey\":1111}", "testKey1");
	testJsonCpp("{\"testKey\":1111}","testKey");
	testJsonCpp("{\"testKey\":\"1111\"}", "testKey");
	testJsonCpp("{\"testKey\":3.14}", "testKey");
	testJsonCpp("{\"testKey\":[]}", "testKey");
	testJsonCpp("{\"testKey\":[1,2,3]}", "testKey");
	testJsonCpp("{\"testKey\":{}}", "testKey");
	testJsonCpp("{\"testKey\":{\"key1\":123}}", "testKey");
	system("pause");
    return 0;
}

结果如下

//无效的json
document={testKey:1111}
parse failed
//无效的json
document={"testKey":}
parse failed
//null
document={"testKey":null}
root["testKey"].isMember=true
root["testKey"].isNull=true
root["testKey"].isString=false
root["testKey"].isObject=false
root["testKey"].isArray=false
root["testKey"].isNumeric=false
root["testKey"].isBool=false
root["testKey"].isConvertibleTostringValue=true
root["testKey"].isConvertibleToobjectValue=true
root["testKey"].isConvertibleToarrayValue=true
root["testKey"].isConvertibleTonullValue=true
root["testKey"].isConvertibleTobooleanValue=true
root["testKey"].isConvertibleTorealValue=true
root["testKey"].isConvertibleTointValue=true
//bool
document={"testKey":false}
root["testKey"].isMember=true
root["testKey"].isNull=false
root["testKey"].isString=false
root["testKey"].isObject=false
root["testKey"].isArray=false
root["testKey"].isNumeric=false
root["testKey"].isBool=true
root["testKey"].isConvertibleTostringValue=true
root["testKey"].isConvertibleToobjectValue=false
root["testKey"].isConvertibleToarrayValue=false
root["testKey"].isConvertibleTonullValue=true
root["testKey"].isConvertibleTobooleanValue=true
root["testKey"].isConvertibleTorealValue=true
root["testKey"].isConvertibleTointValue=true
//无效的json
document={"testKey":abcdef}
parse failed
//不存在的key
document={"testKey":1111}
root["testKey1"].isMember=false
root["testKey1"].isNull=true
root["testKey1"].isString=false
root["testKey1"].isObject=false
root["testKey1"].isArray=false
root["testKey1"].isNumeric=false
root["testKey1"].isBool=false
root["testKey1"].isConvertibleTostringValue=true
root["testKey1"].isConvertibleToobjectValue=true
root["testKey1"].isConvertibleToarrayValue=true
root["testKey1"].isConvertibleTonullValue=true
root["testKey1"].isConvertibleTobooleanValue=true
root["testKey1"].isConvertibleTorealValue=true
root["testKey1"].isConvertibleTointValue=true
//数字
document={"testKey":1111}
root["testKey"].isMember=true
root["testKey"].isNull=false
root["testKey"].isString=false
root["testKey"].isObject=false
root["testKey"].isArray=false
root["testKey"].isNumeric=true
root["testKey"].isBool=false
root["testKey"].isConvertibleTostringValue=true
root["testKey"].isConvertibleToobjectValue=false
root["testKey"].isConvertibleToarrayValue=false
root["testKey"].isConvertibleTonullValue=false
root["testKey"].isConvertibleTobooleanValue=true
root["testKey"].isConvertibleTorealValue=true
root["testKey"].isConvertibleTointValue=true
//数字字符串
document={"testKey":"1111"}
root["testKey"].isMember=true
root["testKey"].isNull=false
root["testKey"].isString=true
root["testKey"].isObject=false
root["testKey"].isArray=false
root["testKey"].isNumeric=false
root["testKey"].isBool=false
root["testKey"].isConvertibleTostringValue=true
root["testKey"].isConvertibleToobjectValue=false
root["testKey"].isConvertibleToarrayValue=false
root["testKey"].isConvertibleTonullValue=false
root["testKey"].isConvertibleTobooleanValue=false
root["testKey"].isConvertibleTorealValue=false
root["testKey"].isConvertibleTointValue=false
//浮点数
document={"testKey":3.14}
root["testKey"].isMember=true
root["testKey"].isNull=false
root["testKey"].isString=false
root["testKey"].isObject=false
root["testKey"].isArray=false
root["testKey"].isNumeric=true
root["testKey"].isBool=false
root["testKey"].isConvertibleTostringValue=true
root["testKey"].isConvertibleToobjectValue=false
root["testKey"].isConvertibleToarrayValue=false
root["testKey"].isConvertibleTonullValue=false
root["testKey"].isConvertibleTobooleanValue=true
root["testKey"].isConvertibleTorealValue=true
root["testKey"].isConvertibleTointValue=true
//空数组
document={"testKey":[]}
root["testKey"].isMember=true
root["testKey"].isNull=false
root["testKey"].isString=false
root["testKey"].isObject=false
root["testKey"].isArray=true
root["testKey"].isNumeric=false
root["testKey"].isBool=false
root["testKey"].isConvertibleTostringValue=false
root["testKey"].isConvertibleToobjectValue=false
root["testKey"].isConvertibleToarrayValue=true
root["testKey"].isConvertibleTonullValue=true
root["testKey"].isConvertibleTobooleanValue=false
root["testKey"].isConvertibleTorealValue=false
root["testKey"].isConvertibleTointValue=false
//数字数组
document={"testKey":[1,2,3]}
root["testKey"].isMember=true
root["testKey"].isNull=false
root["testKey"].isString=false
root["testKey"].isObject=false
root["testKey"].isArray=true
root["testKey"].isNumeric=false
root["testKey"].isBool=false
root["testKey"].isConvertibleTostringValue=false
root["testKey"].isConvertibleToobjectValue=false
root["testKey"].isConvertibleToarrayValue=true
root["testKey"].isConvertibleTonullValue=false
root["testKey"].isConvertibleTobooleanValue=false
root["testKey"].isConvertibleTorealValue=false
root["testKey"].isConvertibleTointValue=false
//空对象
document={"testKey":{}}
root["testKey"].isMember=true
root["testKey"].isNull=false
root["testKey"].isString=false
root["testKey"].isObject=true
root["testKey"].isArray=false
root["testKey"].isNumeric=false
root["testKey"].isBool=false
root["testKey"].isConvertibleTostringValue=false
root["testKey"].isConvertibleToobjectValue=true
root["testKey"].isConvertibleToarrayValue=false
root["testKey"].isConvertibleTonullValue=true
root["testKey"].isConvertibleTobooleanValue=false
root["testKey"].isConvertibleTorealValue=false
root["testKey"].isConvertibleTointValue=false
//对象
document={"testKey":{"key1":123}}
root["testKey"].isMember=true
root["testKey"].isNull=false
root["testKey"].isString=false
root["testKey"].isObject=true
root["testKey"].isArray=false
root["testKey"].isNumeric=false
root["testKey"].isBool=false
root["testKey"].isConvertibleTostringValue=false
root["testKey"].isConvertibleToobjectValue=true
root["testKey"].isConvertibleToarrayValue=false
root["testKey"].isConvertibleTonullValue=false
root["testKey"].isConvertibleTobooleanValue=false
root["testKey"].isConvertibleTorealValue=false
root["testKey"].isConvertibleTointValue=false

猜你喜欢

转载自blog.csdn.net/xiongya8888/article/details/84928004