首页 > 编程语言 >c++用rapidjson解析json串

c++用rapidjson解析json串

时间:2022-12-20 15:12:35浏览次数:73  
标签:obj value son json c++ const itr rapidjson

业务需要消息传递以json形式,使用rapidjson。

把json所有的值对存进一个map里,再根据业务需要判断指令。

定义

using rapidjson_object = rapidjson::GenericObject<false, rapidjson::Value>;
using rapidjson_object_son = rapidjson::GenericObject<true, rapidjson::Value>;

#include "rapidjson/document.h"

//using rapidjson_object = rapidjson::GenericObject<false, rapidjson::Value>;
//using rapidjson_object_son = rapidjson::GenericObject<true, rapidjson::Value>;
//map<string, string> m_jsonRelease;
void test_deal_with_simple_type(const int &num) 
{ 
    printf("%d", num); 
}
void test_deal_with_simple_type(string str) 
{ 
    printf("%s", str); 
}
void CommandRespond::test_deal_with_son_obj(const rapidjson_object_son &obj)
{
    for (const auto &itr : obj)
    {
        if (itr.value.IsInt())
        {
            string str = itr.name.GetString();
            int ivalue = itr.value.GetInt();
            string value = std::to_string(ivalue);
            m_jsonRelease[str] = value;
            test_deal_with_simple_type(itr.value.GetInt());
        }
        if (itr.value.IsString())
        {
            m_jsonRelease[itr.name.GetString()] = itr.value.GetString();
            test_deal_with_simple_type(itr.value.GetString());
        }
        if (itr.value.IsArray())
        {
            int num = 0;
            const auto son_vec = itr.value.GetArray();
            for (const auto & ele : son_vec)
            {
                if (ele.IsObject())
                {
                    const auto son_obj = ele.GetObj();
                    test_deal_with_son_obj(son_obj);
                    continue;
                }
                num = ele.GetInt();
            }
        }
    }
}
void CommandRespond::test_Deal_with_obj(const rapidjson_object &obj)
{
    for (const auto &itr:obj)
    {
        if (itr.value.IsInt())
        {
            string str = itr.name.GetString();
            int ivalue = itr.value.GetInt();
            string value = std::to_string(ivalue);
            m_jsonRelease[str] = value;
            //test_deal_with_simple_type(itr.value.GetInt());
        }
        if (itr.value.IsString())
        {
            m_jsonRelease[itr.name.GetString()] = itr.value.GetString();
            //test_deal_with_simple_type(itr.value.GetString());
        }
        if (itr.value.IsArray())
        {
            int num = 0;
            const auto son_vec = itr.value.GetArray();
            for (const auto & ele : son_vec)
            {
                if (ele.IsObject())
                {
                    const auto son_obj = ele.GetObj();
                    test_deal_with_son_obj(son_obj);
                    continue;
                }
                num = ele.GetInt();
            }
        }
    }
}
map<string, string> CommandRespond::dealwithjson(const char * json)
{
    rapidjson::Document doc;
    rapidjson::ParseResult ok = doc.Parse(json);
    if (!ok)
        return m_jsonRelease;
    const auto start_obj = doc.GetObj();
    test_Deal_with_obj(start_obj);
    //if (doc.HasMember("id"))
    //{
    //    id = doc["id"].GetInt();
    //}
    //for (Value::ConstMemberIterator itr = doc.MemberBegin(); itr!=doc.MemberEnd();itr++)
    //{
    //    Value JsonName;
    //    Value JsonValue;
    //    Document::AllocatorType allocator;
    //    JsonName.CopyFrom(itr->name, allocator);
    //    JsonValue.CopyFrom(itr->value, allocator);
    //    if (JsonValue.IsObject())
    //    {
    //    }
    //}

    return m_jsonRelease;
}

 

 

 

rapidjson递归解析json,C++_李健LL的博客-CSDN博客_rapidjson解析json

用rapidjson解析json数据 - baishengguan - 博客园 (cnblogs.com)

标签:obj,value,son,json,c++,const,itr,rapidjson
From: https://www.cnblogs.com/lely/p/16994206.html

相关文章

  • 小程序里面 SyntaxError: Unexpected end of JSON input报错解决方式
    小程序,经常有跳转传参的功能,一般带一个id或者name,title之类很短的字段,但是如果带很多数据的话,很多人喜欢使用json转换,传一个对象过去小程序传参但这样仅限于很少的字......
  • UE4蓝图与C++
    C++委托蓝图注册//声明委托必须声明多播委托DECLARE_DYNAMIC_MULTICAST_DELEGATE(FRefresh);//声明委托字段{ UPROPERTY(BlueprintAssignable) FRefreshdTest;......
  • jsconfig.json 配置vscode只能跳转文件
    -根目录创建jsconfig.json{"compilerOptions":{"baseUrl":"./","paths":{"@/*":["src/*"],}},"include":["src/**/*"],......
  • 深入对比TOML,JSON和YAML
    坦率地说,在我开始与HugoTOML合作之前,我感到羞耻是一个需要发现的新领域,但我对YAML和JSON非常熟悉。本文将帮助您了解如何通过不同的数据格式构建数据。    在Hugo中,您......
  • SpringMVC传递json字符串,后台接口通过变量接收
    前景介绍在我们日常开发过程中,前台向后台传递参数一般是json或者form表单方式,并且最好统一一种传输方式,不建议json+form混合使用,但是由于form表单在数组结构下拼接比较......
  • [C++]LeetCode 1760 袋子里最少数目的球
    [C++]LeetCode1760.袋子里最少数目的球题目描述Difficulty:中等RelatedTopics:数组,二分查找给你一个整数数组nums,其中nums[i]表示第i个袋子里球的数目。......
  • [编程基础] C++多线程入门8-从线程返回值
    date:2020-05-2917:09:34+0800tags:-编程基础原始C++标准仅支持单线程编程。新的C++标准(称为C++11或C++0x)于2011年发布。在C++11中,引入了新的线程库。因此运行......
  • [C++]LeetCode 2502 设计内存分配器
    [C++]LeetCode2502.设计内存分配器题目描述Difficulty:中等RelatedTopics:设计,数组,哈希表,模拟给你一个整数n,表示下标从0开始的内存数组的大小。所有内存......
  • [C++]LeetCode 1971 寻找图中是否存在路径
    [C++]LeetCode1971.寻找图中是否存在路径题目描述Difficulty:简单RelatedTopics:深度优先搜索,广度优先搜索,并查集,图有一个具有n个顶点的双向图,其中每个......
  • C++ 随机数生成器 mt19937
    一下代码来自官方示例//mersenne_twister_engineconstructor#include<iostream>#include<chrono>#include<random>intmain(){//obtainaseedfromthe......