ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

json解析器

2022-04-14 16:00:24  阅读:195  来源: 互联网

标签:解析器 map include false val huawei json 101


#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/filereadstream.h"
#include <iostream>
#include <string>
#include <map>
#include <fstream>
#include <rapidjson/istreamwrapper.h>
using namespace rapidjson;
using namespace std;
Document doc;
void JsonToMap(const Value &val);
void stringToJsonObject(std::string filePath){
    ifstream ifs(filePath);
    IStreamWrapper is(ifs);
    
    doc.ParseStream(is);
    JsonToMap(doc);

}
//string key, value
// 只有一个层级的
//map<string,string>
//map<string,bool>
//map<string,int>
//map<string,vector<student>>
//map<string,student>
//map<string,map<int type,student>>
//map<string,map<int type,int>>
//map<string,map<int type,vector<int>>>

map<string,string>ms;
map<string,int>mi;
map<string,bool>mb;

template<typename T>
map<string,T>mt;

bool getBasicVal(const string &str,const Value &val){
    if(val.IsBool()){
        mb[str]=val.GetBool();
        return true;
    }else if(val.IsInt()){
        mi[str]=val.GetInt();
        return true;
    }else if(val.IsString()){
        ms[str]=val.GetString();
        return true;
    }
    return false;
}

void JsonToMap(const Value &val){
    for(auto &m : val.GetObject()){
        if(strcmp(m.name.GetString(),"services") == 0){
            cout<<" parse customize type"<<endl;

        }else if(getBasicVal(m.name.GetString(),val[m.name.GetString()])){

        }else if(val[m.name.GetString()].IsArray()){
            const Value &arr = val[m.name.GetString()];
            for(rapidjson::SizeType i=0; i<arr.Size(); i++ ){
                JsonToMap(arr[i]);
            }
        }
        else if(val[m.name.GetString()].IsObject()){
            JsonToMap(val[m.name.GetString()]);
        }
    }
}
template <typename map>
void printMap(map m){
    for(auto iter = m.begin(); iter != m.end(); ++iter){
        cout<<iter->first<<"="<<iter->second<<endl;
    }
}
int main() {
    // 1. 把 JSON 解析至 DOM。
    string filePath = "/home/ygy/work/gos/src/ara/utils/tests/dds.json";
    stringToJsonObject(filePath);

    printMap(ms);
    cout<<"-------\n";
    printMap(mi);
    cout<<"-------\n";
    printMap(mb);
    cout<<"-------\n";
    return 0;

}

如果是自定义类型,需要自定义解析结构体。

如果是想加字段,字段的位置可以是任何位置的key和value。

只要key不和之前的重名。

那么保存到map中的数据就是唯一的。

{
  "applicationName": "/huawei/ap/SwComponent/dds_event_sync_client_sample/DdsEventSyncClientSampleProcess",
  "object1":{
    "serviceId": 101,
    "serviceId1": 101,
    "protocolIdUsed": false
  },
  "fields":    {"serviceId2": 101,
    "serviceId13": 101,
    "protocolIdUsed1": false},
    "events": [
      {
        "event": "CameraImageEvent",
        "id": 19958,
        "isDpRawData": false,
        "dataType": "/huawei/ap/EventDataType/CameraImage/EventSyncImage",
        "topicName": "cameraImageEvent"
      }
    
  ],
  "services": [
    {
      "service": "/huawei/ap/ServiceInterface/DdsEventSyncSample",
      "serviceId": 101,
      "serviceId1": 101,
      "protocolIdUsed": false,
      "new" :1,
      "events": [
        {
          "event": "CameraImageEvent",
          "id": 19958,
          "isDpRawData": false,
          "dataType": "/huawei/ap/EventDataType/CameraImage/EventSyncImage",
          "topicName": "cameraImageEvent"
        }
      ],
      "fields": [   {"serviceId2": 101,
        "serviceId13": 101,
        "protocolIdUsed1": false}],
      "methods": [],
      "instances": [
        {
          "shortName": "/huawei/ap/Service/instance/DdsEventSyncClientInstance",
          "instance": "1",
          "domainId": 0,
          "network": "192.168.10.6",
          "isClient": true,
          "fastSerialize": true,
          "qosProfile": "/var/domainqos.xml",
          "majorVersion": 12,
          "minVersion": 56,
          "events": [
            {
              "id": 19958,
              "qosProfile": "/var/eventsqos.xml"
            }
          ],
          "fields": [],
          "methods": []
        }
      ]
    }
  ]
}
ygy@ygy-VirtualBox:~/work/gos/build$ ./bin/json_test_test 
 parse customize type
applicationName=/huawei/ap/SwComponent/dds_event_sync_client_sample/DdsEventSyncClientSampleProcess
dataType=/huawei/ap/EventDataType/CameraImage/EventSyncImage
event=CameraImageEvent
topicName=cameraImageEvent
-------
id=19958
serviceId=101
serviceId1=101
serviceId13=101
serviceId2=101
-------
isDpRawData=0
protocolIdUsed=0
protocolIdUsed1=0
-------

http://rapidjson.org/zh-cn/md_doc_tutorial_8zh-cn.html 

 

标签:解析器,map,include,false,val,huawei,json,101
来源: https://www.cnblogs.com/yuguangyuan/p/16145049.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有