引用头文件:

#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的详细使用的更多相关文章

  1. 超详细JSON解析步骤

    JSON简介 JAVAScript Object Notation是一种轻量级的数据交换格式 具有良好的可读和便于快速编写的特性. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了 ...

  2. android json解析详细介绍之gson

    废话不多说,什么json是轻量级数据交换标准:自己百度去深入了解:这里有三种json解析工具.本人只用过其中两种:    1.Google Json利器之Gson   评价:简单,方便. 2.阿里巴巴 ...

  3. android Json解析详解(详细代码)

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  4. Unity3d之json解析研究

    Unity3d之json解析研究     json是好东西啊!JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式      JSON简单易用,我要好好研究一下 ...

  5. IOS中Json解析的四种方法

    作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验 ...

  6. Android基础总结(12)——XML和JSON解析

    XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...

  7. 项目开发笔记-传单下发 名片替换 文件复制上传/html静态内容替换/json解析/html解析

    //////////////////////////// 注意: 此博客是个人工作笔记 非独立demo////////////////////////////////// .............. ...

  8. 自己动手实现一个简单的JSON解析器

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...

  9. json解析,异步下载(listview仅滑动时加载)Demo总结

    异步加载的练习demo 主要涉及知识点: 1.解析json格式数据,主要包括图片,文本 2.使用AsynTask异步方式从网络下载图片 3.BaseAdapter的"优雅"使用 4 ...

随机推荐

  1. CSS定位 深入理解定位(position)的偏移

    前言 CSS有三种基本的布局机制:普通流.浮动和绝对定位.利用定位,可以准确地定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的位置.但元素究竟如何定位,定位到 ...

  2. 试用VS2019正式版

    1.下载地址https://visualstudio.microsoft.com/zh-hans/downloads/2.安装,安装过程比较简单,直接下一步,下一步即可,现在的网速一般下载+安装要2个 ...

  3. JS通用模块模式 UMD

    历史 JS诞生之初面向简单页面开发, 没有模块的概念. 后来页面逐渐复杂, 人类构造到 IIFE 立即执行函数来模拟 模块: 之前也有雅虎的实践,使用命名空间 作为模块名. 最后衍生出 面向各种使用场 ...

  4. Object Detection / Human Action Recognition 项目

    https://towardsdatascience.com/real-time-and-video-processing-object-detection-using-tensorflow-open ...

  5. Hyper-V安装虚拟机

    1.进入控制面板-程序,选择“启用或关闭Windows功能” 2.找到Hyper-V,勾选,重启电脑,即可 3.若是没有找到Hyper-V,如此操作 1)新建txt文件,输入以下内容: pushd & ...

  6. BufferedReader类里面mark(int readAheadLimit)中readAheadLimit到底代表什么

    昨天用到了BufferedReader类里面mark(int readAheadLimit)方法,对于文档里面readAheadLimit的解释有些没弄懂,就翻开源码研究.具体的源码分析可以参见htt ...

  7. spring kafka生产、消费消息

    参考网址: https://blog.csdn.net/lansetiankong12/article/details/54946641 1.新建Maven项目-KafkaMaven ->点击n ...

  8. java 中类的方法

    object类,即所有类的父类, getClass() 返回对象执行时的Class实例, getClass().getName();// 返回类的名字 toString();// equals();/ ...

  9. C. Neko does Maths(数论 二进制枚举因数)

     题目链接:https://codeforces.com/contest/1152/problem/C 题目大意:给你a和b,然后让你找到一个k,使得a+k和b+k的lcm. 学习网址:https:/ ...

  10. java控制多线程同时写一个文件

    最近出现一个需求,大体要做的就是控制多线程同时操作一个文件.当时第一个反应是不要用synchronized,太low了,然后我就使用了读写锁ReentrantReadWriteLock,然后写完静下来 ...