C++ Json解析CJsonObject的详细使用
引用头文件:
#include <string>
#include <iostream>
#include <fstream>
#include <cassert>
#include <stdio.h>
#include <io.h>
#include<sstream>
#include <vector>
#include "CJsonObject.hpp" using namespace std;
using namespace neb;
CJsonObject Objson;
__declspec(dllexport) void __stdcall read_JSon(char* path)
{
ifstream t(path);
string str((istreambuf_iterator<char>(t)),istreambuf_iterator<char>());
string strValue;
Objson= CJsonObject(str);
cout << "-------------------------------------------------------------------" << std::endl;}
加载JSON文件
//保存JSON文件
__declspec(dllexport) void __stdcall write_string_to_file_append(char* file_string)
{
/*remove(file_string);*/
std::ofstream OsWrite(file_string, std::ofstream::trunc);
OsWrite << Objson.ToString();
OsWrite << std::endl;
OsWrite.close();
std::cout << "------------------执行完毕------------------------" << std::endl;
}
保存修改后的JSON结构
1.修改如下图数据结构:

__declspec(dllexport) void __stdcall FxmWindDirectBaseLine(int num, int count, char** pArr, int* sArr, int* iArr)
{ string iValue;
for (int i = ; i < Objson["WindDirectLine"]["coordinates"][num]["mWindDirectBaseLine"].GetArraySize(); i++)
{
Objson["WindDirectLine"]["coordinates"][num]["mWindDirectBaseLine"].Delete(i);
i--;
}
cout << "---------------" << endl;
cout << Objson["WindDirectLine"]["coordinates"][num]["mWindDirectBaseLine"].GetArraySize() << endl;
CJsonObject je;
for (int i = ; i < count; i++)
{
iValue = pArr[i];
je.Add("p", iValue);
je.Add("s", sArr[i]);
je.Add("i", iArr[i]);
std::cout << "pArr:" << je.ToString() << std::endl;
Objson["WindDirectLine"]["coordinates"][num]["mWindDirectBaseLine"].Add(je);
je.Clear();
}
cout <<"---------------" << endl;
for (int i = ; i < Objson["WindDirectLine"]["coordinates"][num]["mWindDirectBaseLine"].GetArraySize(); i++)
{
cout << "mWindDirectBaseLine" << i << ":" << Objson["WindDirectLine"]["coordinates"][num]["mWindDirectBaseLine"][i]("p") << endl;
}
cout << "---------------" << endl;
}
修改mWindDirectBaseLine节点
2.修改如下图数据结构:

__declspec(dllexport) void __stdcall UpmWindDirectBars(int num,int count, char** fpArr,int* fsArr, int* fiArr, char** hpArr, int* hsArr, int* hiArr)
{
string iValue;
for (int i = ; i < Objson["WindDirectLine"]["coordinates"][num]["mWindDirectBars"].GetArraySize(); i++)
{
Objson["WindDirectLine"]["coordinates"][num]["mWindDirectBars"].Delete(i);
i--;
}
cout << "---------------" << endl;
CJsonObject je;
for (int i = ; i < count; i++)
{
iValue = fpArr[i];
je.AddEmptySubObject("f");
je["f"].Add("p", iValue);
je["f"].Add("s", fsArr[i]);
je["f"].Add("i", fiArr[i]);
iValue = hpArr[i];
je.AddEmptySubObject("h");
je["h"].Add("p", iValue);
je["h"].Add("s", hsArr[i]);
je["h"].Add("i", hiArr[i]);
std::cout << "pArr:" << je.ToString() << std::endl;
Objson["WindDirectLine"]["coordinates"][num]["mWindDirectBars"].Add(je);
je.Clear();
}
cout << "---------------" << endl;
}
修改mWindDirectBars节点
3.修改如下图数据结构:

__declspec(dllexport) void UpHuxianArrays( int count, double* fpArr, double* fsArr, double* fiArr)
{
std::cout << "-------------------------------------------------------------------" << std::endl; for (int i = ; i <Objson["resultWindSpeedGrid"]["HuxianArrays"].GetArraySize(); i++)
{
Objson["resultWindSpeedGrid"]["HuxianArrays"].Delete(i);
i--;
}
cout << "Count:" << Objson["resultWindSpeedGrid"]["HuxianArrays"].GetArraySize() << endl;
cout << "---------------" << endl;
CJsonObject je;
for (int i = ; i < count; i++)
{
je.AddEmptySubArray("Params");
je["Params"].Add(fpArr[i]);
je["Params"].Add(fsArr[i]);
je["Params"].Add(fiArr[i]);
std::cout << "pArr:" << je.ToString() << std::endl;
Objson["resultWindSpeedGrid"]["HuxianArrays"].Add(je);
je.Clear();
}
Objson["resultWindSpeedGrid"].Replace("HuxianShu", Objson["resultWindSpeedGrid"]["HuxianArrays"].GetArraySize());
cout << "---------------" << endl;
}
修改HuxianArrays节点
官方案例:
int iValue;
std::string strValue;
neb::CJsonObject oJson("{\"refresh_interval\":60,"
"\"dynamic_loading\":["
"{"
"\"so_path\":\"plugins/User.so\", \"load\":false, \"version\":1,"
"\"cmd\":["
"{\"cmd\":2001, \"class\":\"neb::CmdUserLogin\"},"
"{\"cmd\":2003, \"class\":\"neb::CmdUserLogout\"}"
"],"
"\"module\":["
"{\"path\":\"im/user/login\", \"class\":\"neb::ModuleLogin\"},"
"{\"path\":\"im/user/logout\", \"class\":\"neb::ModuleLogout\"}"
"]"
"},"
"{"
"\"so_path\":\"plugins/ChatMsg.so\", \"load\":false, \"version\":1,"
"\"cmd\":["
"{\"cmd\":2001, \"class\":\"neb::CmdChat\"}"
"],"
"\"module\":[]"
"}"
"]"
"}");
std::cout << oJson.ToString() << std::endl;
std::cout << "-------------------------------------------------------------------" << std::endl;
std::cout << oJson["dynamic_loading"][]["cmd"][]("class") << std::endl;
oJson["dynamic_loading"][]["cmd"][].Get("cmd", iValue);
std::cout << "iValue = " << iValue << std::endl;
oJson["dynamic_loading"][]["module"][].Get("path", strValue);
std::cout << "strValue = " << strValue << std::endl;
std::cout << "-------------------------------------------------------------------" << std::endl;
oJson.AddEmptySubObject("depend");
oJson["depend"].Add("nebula", "https://github.com/Bwar/Nebula");
oJson["depend"].AddEmptySubArray("bootstrap");
oJson["depend"]["bootstrap"].Add("BEACON");
oJson["depend"]["bootstrap"].Add("LOGIC");
oJson["depend"]["bootstrap"].Add("LOGGER");
oJson["depend"]["bootstrap"].Add("INTERFACE");
oJson["depend"]["bootstrap"].Add("ACCESS");
oJson["depend"].AddEmptySubArray("boot");
CJsonObject ject;
string iValues;
for (int i = ; i < count; i++)
{
iValues = pArr[i];
ject.Add("p", iValues);
ject.Add("s", );
ject.Add("i", -);
std::cout << "pArr:" << ject.ToString() << std::endl;
oJson["depend"]["boot"].Add(ject);
ject.Clear();
}
std::cout << oJson.ToString() << std::endl;
std::cout << "-------------------------------------------------------------------" << std::endl;
std::cout << oJson.ToFormattedString() << std::endl;
官方代码
完整案例下载地址:https://files-cdn.cnblogs.com/files/motao9527/CJsonObject.rar
C++ Json解析CJsonObject的详细使用的更多相关文章
- 超详细JSON解析步骤
JSON简介 JAVAScript Object Notation是一种轻量级的数据交换格式 具有良好的可读和便于快速编写的特性. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了 ...
- android json解析详细介绍之gson
废话不多说,什么json是轻量级数据交换标准:自己百度去深入了解:这里有三种json解析工具.本人只用过其中两种: 1.Google Json利器之Gson 评价:简单,方便. 2.阿里巴巴 ...
- android Json解析详解(详细代码)
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
- Unity3d之json解析研究
Unity3d之json解析研究 json是好东西啊!JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 JSON简单易用,我要好好研究一下 ...
- IOS中Json解析的四种方法
作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验 ...
- Android基础总结(12)——XML和JSON解析
XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...
- 项目开发笔记-传单下发 名片替换 文件复制上传/html静态内容替换/json解析/html解析
//////////////////////////// 注意: 此博客是个人工作笔记 非独立demo////////////////////////////////// .............. ...
- 自己动手实现一个简单的JSON解析器
1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...
- json解析,异步下载(listview仅滑动时加载)Demo总结
异步加载的练习demo 主要涉及知识点: 1.解析json格式数据,主要包括图片,文本 2.使用AsynTask异步方式从网络下载图片 3.BaseAdapter的"优雅"使用 4 ...
随机推荐
- CSS定位 深入理解定位(position)的偏移
前言 CSS有三种基本的布局机制:普通流.浮动和绝对定位.利用定位,可以准确地定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的位置.但元素究竟如何定位,定位到 ...
- 试用VS2019正式版
1.下载地址https://visualstudio.microsoft.com/zh-hans/downloads/2.安装,安装过程比较简单,直接下一步,下一步即可,现在的网速一般下载+安装要2个 ...
- JS通用模块模式 UMD
历史 JS诞生之初面向简单页面开发, 没有模块的概念. 后来页面逐渐复杂, 人类构造到 IIFE 立即执行函数来模拟 模块: 之前也有雅虎的实践,使用命名空间 作为模块名. 最后衍生出 面向各种使用场 ...
- Object Detection / Human Action Recognition 项目
https://towardsdatascience.com/real-time-and-video-processing-object-detection-using-tensorflow-open ...
- Hyper-V安装虚拟机
1.进入控制面板-程序,选择“启用或关闭Windows功能” 2.找到Hyper-V,勾选,重启电脑,即可 3.若是没有找到Hyper-V,如此操作 1)新建txt文件,输入以下内容: pushd & ...
- BufferedReader类里面mark(int readAheadLimit)中readAheadLimit到底代表什么
昨天用到了BufferedReader类里面mark(int readAheadLimit)方法,对于文档里面readAheadLimit的解释有些没弄懂,就翻开源码研究.具体的源码分析可以参见htt ...
- spring kafka生产、消费消息
参考网址: https://blog.csdn.net/lansetiankong12/article/details/54946641 1.新建Maven项目-KafkaMaven ->点击n ...
- java 中类的方法
object类,即所有类的父类, getClass() 返回对象执行时的Class实例, getClass().getName();// 返回类的名字 toString();// equals();/ ...
- C. Neko does Maths(数论 二进制枚举因数)
题目链接:https://codeforces.com/contest/1152/problem/C 题目大意:给你a和b,然后让你找到一个k,使得a+k和b+k的lcm. 学习网址:https:/ ...
- java控制多线程同时写一个文件
最近出现一个需求,大体要做的就是控制多线程同时操作一个文件.当时第一个反应是不要用synchronized,太low了,然后我就使用了读写锁ReentrantReadWriteLock,然后写完静下来 ...