#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 = ; 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 = ; i < v[*it].size(); i++)
{
//如果在递归的过程中已找到,则返回
string strvalue = GetJsonStringValue(string(""), strKey, v[*it][i]);
if (!strvalue.empty())
{
return strvalue;
}
}
}
} return string("");
}

[转]JsonCpp遍历json的更多相关文章

  1. 第三方库 jsoncpp 读写json

    一.摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传 ...

  2. for in 遍历json

    获取对象属性的语法: 1.obj.attr 2.obj["attr"] for in 遍历json的时候, 1.for(attr in json)中的attr获取到的是json中属 ...

  3. js声明json数据,打印json数据,遍历json数据

    1.js声明json数据: 2.打印json数据: 3.遍历json数据 //声明JSON var json = {}; json.a = 1; //第一种赋值方式(仿对象型) json['b'] = ...

  4. jsoncpp操作 json

    jsoncpp操作 json 博客分类: c/c++ object-c 之 iphone   #include <iostream> //#include "json/json. ...

  5. fastJson顺序遍历JSON字段

    fastJson在把json格式的字符串转换成JSONObject的时候,使用的是HashMap,所以排序规则是根据HASH值排序的,如果想要按照字符串顺序遍历JSON属性,需要在转换的时候指定使用L ...

  6. js遍历json数据

    先看看json返回的数据结构: 我需要遍历取出bookreno   与  title  加载到页面容器中去 首先我要取到 recommendedBookList  字典结构数据,然后遍历反射到相应对象 ...

  7. android JSONArray JSONObject 字符串转json数组 遍历json对象

    String json = "{''data'':[{''name'':''Wallace''},{''name'':''Grommit''}]}"; StringBuffer m ...

  8. 对于json对像,怎么遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值

    对于json对像,怎么遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值?请参阅下面的关键代码: <html> <head> & ...

  9. for-in遍历json数据

    1.for遍历json数据 ','fun':'前端开发'} for(var attr in json){ alert(json[attr]) //遍历json属性的数据 alert(json['nam ...

随机推荐

  1. code_demo 用随机森林做缺失值预测

    直接上代码 在做特征工程的时候, 其实可以用算法来处理特征工程的, 比如缺失值填充之类的. 这里一段code_demo是搬运来的, 不过是真滴好用呢. # RandomForest - 强化, 对 n ...

  2. window10自动更换bing壁纸

    问题描述: bing的每日推荐的首页壁纸很不错,想当做系统壁纸! https://cn.bing.com/ 问题解决: 在window-store商店搜索  “Dynamic Theme”,安装即可! ...

  3. python正则表达式(3)--match方法

    1.re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None. (1)函数语法: re.match(pattern, st ...

  4. Chrome出现“浏览器由所属组织管理”如何解决

    之前碰到了这个问题,删除注册表解决了.当时没记下来,今天又碰到了.那就写下来以备之后再碰到吧 删除了注册表\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Ch ...

  5. Java动态代理-JDK自带实现

    上篇文章讲解了什么是静态代理,但是静态代理有一个问题就是需要建立很多的代理类,这样我们需要修改代理的方法的时候,需要在每个类中都要修改,这对于我们来说:当代理类很多的时候工作量就会成倍的增加. 于是针 ...

  6. 【Java】SpringBoot-Ajax-Json:Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported for @RequestBody XXX

    1.重新组装数据 var params=JSON.stringify({"userword":XXXXX,"password":"XXXXX" ...

  7. "<<"和“>>”运算

  8. node 文件上传

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. moya与网络编程思想:网络请求的生命周期

    请求数据管理的集中化: 请求配置的标注化: 请求管理的函数式参量化: 几个端点: target代表应用端的原始数据; endpoint代表应用端到网络端的中间数据,这个数据可以编辑公用数据header ...

  10. foreach中的collection

    foreach中collection的三种用法 https://www.cnblogs.com/xiemingjun/p/9800999.html foreach的主要用在构建in条件中,它可以在SQ ...