#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<<" : "; 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(""), strKey, v[*it][i]); if (!strvalue.empty()) { return strvalue; } } } } return string(""); }