C++ Json解析CJsonObject的详细使用
程序员文章站
2022-04-09 10:10:10
引用头文件: 1 __declspec(dllexport) void __stdcall read_JSon(char* path) 2 { 3 ifstream t(path); 4 string str((istreambuf_iterator(t)),istreambuf_ite ......
引用头文件:
#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;
1 __declspec(dllexport) void __stdcall read_json(char* path) 2 { 3 ifstream t(path); 4 string str((istreambuf_iterator<char>(t)),istreambuf_iterator<char>()); 5 string strvalue; 6 objson= cjsonobject(str); 7 cout << "-------------------------------------------------------------------" << std::endl;}
1 //保存json文件 2 __declspec(dllexport) void __stdcall write_string_to_file_append(char* file_string) 3 { 4 /*remove(file_string);*/ 5 std::ofstream oswrite(file_string, std::ofstream::trunc); 6 oswrite << objson.tostring(); 7 oswrite << std::endl; 8 oswrite.close(); 9 std::cout << "------------------执行完毕------------------------" << std::endl; 10 }
1.修改如下图数据结构:
1 __declspec(dllexport) void __stdcall fxmwinddirectbaseline(int num, int count, char** parr, int* sarr, int* iarr) 2 { 3 4 string ivalue; 5 for (int i = 0; i < objson["winddirectline"]["coordinates"][num]["mwinddirectbaseline"].getarraysize(); i++) 6 { 7 objson["winddirectline"]["coordinates"][num]["mwinddirectbaseline"].delete(i); 8 i--; 9 } 10 cout << "---------------" << endl; 11 cout << objson["winddirectline"]["coordinates"][num]["mwinddirectbaseline"].getarraysize() << endl; 12 cjsonobject je; 13 for (int i = 0; i < count; i++) 14 { 15 ivalue = parr[i]; 16 je.add("p", ivalue); 17 je.add("s", sarr[i]); 18 je.add("i", iarr[i]); 19 std::cout << "parr:" << je.tostring() << std::endl; 20 objson["winddirectline"]["coordinates"][num]["mwinddirectbaseline"].add(je); 21 je.clear(); 22 } 23 cout <<"---------------" << endl; 24 for (int i = 0; i < objson["winddirectline"]["coordinates"][num]["mwinddirectbaseline"].getarraysize(); i++) 25 { 26 cout << "mwinddirectbaseline" << i << ":" << objson["winddirectline"]["coordinates"][num]["mwinddirectbaseline"][i]("p") << endl; 27 } 28 cout << "---------------" << endl; 29 }
2.修改如下图数据结构:
1 __declspec(dllexport) void __stdcall upmwinddirectbars(int num,int count, char** fparr,int* fsarr, int* fiarr, char** hparr, int* hsarr, int* hiarr) 2 { 3 string ivalue; 4 for (int i = 0; i < objson["winddirectline"]["coordinates"][num]["mwinddirectbars"].getarraysize(); i++) 5 { 6 objson["winddirectline"]["coordinates"][num]["mwinddirectbars"].delete(i); 7 i--; 8 } 9 cout << "---------------" << endl; 10 cjsonobject je; 11 for (int i = 0; i < count; i++) 12 { 13 ivalue = fparr[i]; 14 je.addemptysubobject("f"); 15 je["f"].add("p", ivalue); 16 je["f"].add("s", fsarr[i]); 17 je["f"].add("i", fiarr[i]); 18 ivalue = hparr[i]; 19 je.addemptysubobject("h"); 20 je["h"].add("p", ivalue); 21 je["h"].add("s", hsarr[i]); 22 je["h"].add("i", hiarr[i]); 23 std::cout << "parr:" << je.tostring() << std::endl; 24 objson["winddirectline"]["coordinates"][num]["mwinddirectbars"].add(je); 25 je.clear(); 26 } 27 cout << "---------------" << endl; 28 }
3.修改如下图数据结构:
1 __declspec(dllexport) void uphuxianarrays( int count, double* fparr, double* fsarr, double* fiarr) 2 { 3 std::cout << "-------------------------------------------------------------------" << std::endl; 4 5 6 for (int i = 0; i <objson["resultwindspeedgrid"]["huxianarrays"].getarraysize(); i++) 7 { 8 objson["resultwindspeedgrid"]["huxianarrays"].delete(i); 9 i--; 10 } 11 cout << "count:" << objson["resultwindspeedgrid"]["huxianarrays"].getarraysize() << endl; 12 cout << "---------------" << endl; 13 cjsonobject je; 14 for (int i = 0; i < count; i++) 15 { 16 je.addemptysubarray("params"); 17 je["params"].add(fparr[i]); 18 je["params"].add(fsarr[i]); 19 je["params"].add(fiarr[i]); 20 std::cout << "parr:" << je.tostring() << std::endl; 21 objson["resultwindspeedgrid"]["huxianarrays"].add(je); 22 je.clear(); 23 } 24 objson["resultwindspeedgrid"].replace("huxianshu", objson["resultwindspeedgrid"]["huxianarrays"].getarraysize()); 25 cout << "---------------" << endl; 26 }
官方案例:
1 int ivalue; 2 std::string strvalue; 3 neb::cjsonobject ojson("{\"refresh_interval\":60," 4 "\"dynamic_loading\":[" 5 "{" 6 "\"so_path\":\"plugins/user.so\", \"load\":false, \"version\":1," 7 "\"cmd\":[" 8 "{\"cmd\":2001, \"class\":\"neb::cmduserlogin\"}," 9 "{\"cmd\":2003, \"class\":\"neb::cmduserlogout\"}" 10 "]," 11 "\"module\":[" 12 "{\"path\":\"im/user/login\", \"class\":\"neb::modulelogin\"}," 13 "{\"path\":\"im/user/logout\", \"class\":\"neb::modulelogout\"}" 14 "]" 15 "}," 16 "{" 17 "\"so_path\":\"plugins/chatmsg.so\", \"load\":false, \"version\":1," 18 "\"cmd\":[" 19 "{\"cmd\":2001, \"class\":\"neb::cmdchat\"}" 20 "]," 21 "\"module\":[]" 22 "}" 23 "]" 24 "}"); 25 std::cout << ojson.tostring() << std::endl; 26 std::cout << "-------------------------------------------------------------------" << std::endl; 27 std::cout << ojson["dynamic_loading"][0]["cmd"][1]("class") << std::endl; 28 ojson["dynamic_loading"][0]["cmd"][0].get("cmd", ivalue); 29 std::cout << "ivalue = " << ivalue << std::endl; 30 ojson["dynamic_loading"][0]["module"][0].get("path", strvalue); 31 std::cout << "strvalue = " << strvalue << std::endl; 32 std::cout << "-------------------------------------------------------------------" << std::endl; 33 ojson.addemptysubobject("depend"); 34 ojson["depend"].add("nebula", "https://github.com/bwar/nebula"); 35 ojson["depend"].addemptysubarray("bootstrap"); 36 ojson["depend"]["bootstrap"].add("beacon"); 37 ojson["depend"]["bootstrap"].add("logic"); 38 ojson["depend"]["bootstrap"].add("logger"); 39 ojson["depend"]["bootstrap"].add("interface"); 40 ojson["depend"]["bootstrap"].add("access"); 41 ojson["depend"].addemptysubarray("boot"); 42 cjsonobject ject; 43 string ivalues; 44 for (int i = 0; i < count; i++) 45 { 46 ivalues = parr[i]; 47 ject.add("p", ivalues); 48 ject.add("s", 0); 49 ject.add("i", -1); 50 std::cout << "parr:" << ject.tostring() << std::endl; 51 ojson["depend"]["boot"].add(ject); 52 ject.clear(); 53 } 54 std::cout << ojson.tostring() << std::endl; 55 std::cout << "-------------------------------------------------------------------" << std::endl; 56 std::cout << ojson.toformattedstring() << std::endl;
完整案例下载地址:https://files-cdn.cnblogs.com/files/motao9527/cjsonobject.rar