加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

JsonCpp遍历json

发布时间:2020-12-16 19:42:45 所属栏目:百科 来源:网络整理
导读:#include "json.h" typedef Json::Writer JsonWriter; typedef Json::Reader JsonReader; typedef Json::Value JsonValue; void print(JsonValue v) { JsonValue::Members mem = v.getMemberNames(); for (auto iter = mem.begin(); iter != mem.end(); iter
#include "json.h"  
typedef Json::Writer JsonWriter;  
typedef Json::Reader JsonReader;  
typedef Json::Value  JsonValue;         
void print(JsonValue v)  
{      
	JsonValue::Members mem = v.getMemberNames();      
	for (auto iter = mem.begin(); iter != mem.end(); iter++)      
	{          
		cout<<*iter<<"t: ";          
		if (v[*iter].type() == Json::objectValue)          
		{              
			cout<<endl;              
			print(v[*iter]);          
		}          
		else if (v[*iter].type() == Json::arrayValue)          
		{              
			cout<<endl;              
			auto cnt = v[*iter].size();              
			for (auto i = 0; i < cnt; i++)              
			{                  
				print(v[*iter][i]);              
			}          
		}          
		else if (v[*iter].type() == Json::stringValue)          
		{              
			cout<<v[*iter].asString()<<endl;          
		}          
		else if (v[*iter].type() == Json::realValue)          
		{              
			cout<<v[*iter].asDouble()<<endl;          
		}          
		else if (v[*iter].type() == Json::uintValue)          
		{              
			cout<<v[*iter].asUInt()<<endl;          
		}          
		else        
		{              
			cout<<v[*iter].asInt()<<endl;          
		}      
	}      
	return;  
} 

//搜索json中指定的key的value,这是原创,哈哈

//搜索json得到指定key的值,只支持stringvalue
//如果strcontent不为空,使用strcontent解析,如果为空直接使用v
string GetJsonStringValue(string strContent,string& strKey,Json::Value v)
{
	if (!strContent.empty())
	{
		Json::Reader reader;
		if (!reader.parse(strContent,v))
		{
			return string("");
		}
	}

	Json::Value::Members mem = v.getMemberNames();
	Json::Value::Members::iterator it;
	//遍历所有key广度搜索
	for (it = mem.begin(); it != mem.end(); it++)
	{
		if (*it == strKey)
		{
			if (v[*it].type() == Json::stringValue)
			{
				return v[*it].asString();
			}
			return string("");
		}
	}

	//如果未找到,再深度搜索
	for (it = mem.begin(); it != mem.end(); it++)
	{
		Json::ValueType type = v[*it].type();
		if (type == Json::objectValue)
		{
			string strvalue = GetJsonStringValue(string(""),strKey,v[*it]);
			if (!strvalue.empty())
			{
				return strvalue;
			}
		}
		else if (type == Json::arrayValue)
		{
			for (int i = 0; i < v[*it].size(); i++)
			{
				//如果在递归的过程中已找到,则返回
				string strvalue = GetJsonStringValue(string(""),v[*it][i]);
				if (!strvalue.empty())
				{
					return strvalue;
				}
			}
		}
	}

	return string("");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读