使用rapidjson把文本json数据解析到树状结构
一个递归搞定
无聊的时候练练手就写了一个 头文件什么的我就不贴了 demo程序是MFC写的
void ParseObject(rapidjson::Value dc, CTreeCtrl * pTreeRoot,HTREEITEM hTreeHandle)
{
for (rapidjson::Value::ConstMemberIterator it = dc.MemberBegin(); it != dc.MemberEnd(); it++)
{
std::wstring strName = Ansi_To_Unicode(it->name.GetString());
HTREEITEM pTmpObj = NULL;
if (dc[it->name.GetString()].IsObject() || dc[it->name.GetString()].IsArray())
{
pTmpObj = pTreeRoot->InsertItem(strName.c_str(), hTreeHandle);
}
else
{
strName += _T(":"); if (it->value.IsInt64())
{
strName += std::to_wstring(it->value.GetInt64());
pTmpObj = pTreeRoot->InsertItem(strName.c_str(), hTreeHandle);
}
else if (it->value.IsDouble())
{
strName += std::to_wstring(it->value.GetDouble());
pTmpObj = pTreeRoot->InsertItem(strName.c_str(), hTreeHandle);
}
else if (it->value.IsBool())
{
strName += std::to_wstring((int)it->value.GetBool());
pTmpObj = pTreeRoot->InsertItem(strName.c_str(), hTreeHandle);
}
else if (it->value.IsFloat())
{
strName += std::to_wstring(it->value.GetFloat());
pTmpObj = pTreeRoot->InsertItem(strName.c_str(), hTreeHandle);
}
else if (it->value.IsInt())
{
strName += std::to_wstring(it->value.GetInt());
pTmpObj = pTreeRoot->InsertItem(strName.c_str(), hTreeHandle);
}
else if (it->value.IsNumber())
{
strName += std::to_wstring(it->value.GetUint());
pTmpObj = pTreeRoot->InsertItem(strName.c_str(), hTreeHandle);
}
else if (it->value.IsNull())
{
strName += _T("");
pTmpObj = pTreeRoot->InsertItem(strName.c_str(), hTreeHandle);
}
else if (it->value.IsString())
{
strName += Ansi_To_Unicode(it->value.GetString());
pTmpObj = pTreeRoot->InsertItem(strName.c_str(), hTreeHandle);
}
} if (dc[it->name.GetString()].IsObject() && pTmpObj)
{
ParseObject(dc[it->name.GetString()].GetObjectW(), pTreeRoot, pTmpObj);
}
if (dc[it->name.GetString()].IsArray() && pTmpObj)
{
int index = ;
for (auto &v : dc[it->name.GetString()].GetArray())
{
if (v.IsObject())
{
HTREEITEM pTmparr = pTreeRoot->InsertItem((strName + _T("[") + std::to_wstring(index) + _T("]")).c_str(), pTmpObj);
if (pTmparr)
ParseObject(v.GetObjectW(), pTreeRoot, pTmparr);
}
index++;
}
}
}
}
void CtreeDemoDlg::OnBnClickedButton1()
{
CTreeCtrl * pTreeRoot = (CTreeCtrl*)GetDlgItem(IDC_TREE1);
if (!pTreeRoot)
return;
std::string strResult;
CString buftext;
GetDlgItemText(IDC_RICHEDIT21, buftext);
strResult = Unicode_To_Ansi(buftext.GetBuffer());
if (strResult.empty())return;
//wstring strbuffer = Ansi_To_Unicode(strResult.c_str());
rapidjson::Document dc;
dc.Parse(strResult.c_str());
if (!dc.IsObject())
return;
HTREEITEM pTreeObj = pTreeRoot->InsertItem(_T("object"));
if (!pTreeObj)
return;
HTREEITEM pTmpObj = nullptr;
ParseObject(dc.GetObjectW(), pTreeRoot, pTreeObj);
return;
}
效果图


使用rapidjson把文本json数据解析到树状结构的更多相关文章
- js 每日一更(数组转换成前端更容易解析的树状结构)
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- EasyUI + ajax + treegrid/datagrid 接收 json 数据,显示树状/网状表结构
最后一更了,时间间隔有点久了~~ EasyUI作为一个成熟的前端框架,封装了ajax,对于数据的处理配合datagrid组件的使用,使其非常适合后台管理界面的开发(目前来说界面有点过时了). 通过aj ...
- JSON数据解析 基础知识及链接收集
JSON数据解析学习 JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSON 是存储和交换文本信息的语法.类似 XML.但是JSON 比 ...
- 浅谈JSON数据解析方法
JSON数据解析 JSON是什么?? 如何把JSON数据解析出来 如何把一个字典转换为JSON JSON详细介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交 ...
- JSON数据解析(转)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 本文将主要介绍在Android ...
- JSON数据解析(GSON方式) (转)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 在上一篇博文<Andro ...
- iOS - JSON 数据解析
iOS - JSON 数据解析 前言 NS_CLASS_AVAILABLE(10_7, 5_0) @interface NSJSONSerialization : NSObject @availab ...
- iOS高级编程之XML,JSON数据解析
解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 一.X ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
随机推荐
- 12 Top Open Source Data Analytics Apps
1. Hadoop It would be impossible to talk about open source data analytics without mentioning Hadoop. ...
- spark.read.csv读取CSV文件 ArrayIndexOutOfBoundsException报错
通过 spark.read.csv读取CSV文件时,遇到 到 ArrayIndexOutOfBoundsException报错,初步判断是缺少参数导致,放百度看看,没找引起问题相关的参数. 第一个看到 ...
- HTML静态网页--JavaScript-DOW操作
1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Windows对象操作 一.属性和方法: 属性(值或者子对象): o ...
- docker 使用总结
docker run asn@hadoop1:~/Desktop$ docker run --help Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG ...
- 2006年NOIP普及组复赛题解
题目涉及算法: 明明的随机数:简单模拟: 开心的金明:01背包: Jam的计数法:模拟: 数列:二进制. 明明的随机数 题目链接:https://www.luogu.org/problem/P1059 ...
- Spring Data JPA查询指定列,并返回实体(改)
现有PostEntiy实力,包含各种属性,如: /** * @Auther: DingShuo * @Date: 2018/7/18 11:09 * @Description: */ @Entity ...
- 2019-4-12-WPF-绑定的默认模式
title author date CreateTime categories WPF 绑定的默认模式 lindexi 2019-04-12 09:38:58 +0800 2019-04-12 09: ...
- Sublime Text 安装中文、英文字体
在 Sublimte Text 如何使用默认的字体,英文好看,但是中文不好,所以我就找了一个支持中文英文的字体 YaHei Consolas Hybrid 这个字体看起来效果比较差 下载地址: 如果无 ...
- vue-learning:22 - js - directives
directives 在讲解视图层指令时,我们讲到ref特性,使用它我们可以获取当前DOM元素对象,以便执行相关操作. <div id="app"> <input ...
- TOJ4587:抓苹果(DP)
传送门:抓苹果 dp(i,j) = max(dp(i-1,j-1),dp(i-1,j))+当i这分钟时能否刚好移动到这棵树下. 初始化是对不移动的情况下. 代码 #include<bits/st ...