c++json nlohmann 和 poco json 使用,boost

2023-11-06

C++使用nlohmann json

最好用的c++ json库是 nlohmann

C++使用nlohmann json_wphkadn的博客-CSDN博客

把变量写成json容易,可是把json变成变量就要复杂一点,不过对于nlohmann一点都不复杂

mkdir build
cd build
cmake ..
make
sudo make install

boost::property_tree::read_json

C++ boost 解析 Json_「已注销」的博客-CSDN博客

参考

如何使用Poco C ++创建和解析分层/嵌套JSON? - IT屋-程序员软件开发技术分享社区

#include "Poco/JSON/Parser.h"
#include "Poco/JSON/ParseHandler.h"
#include "Poco/JSON/Stringifier.h"

using Poco::JSON::ParseHandler;
using Poco::JSON::Stringifier;
using Poco::JSON::Object;
using Poco::JSON::Parser;
using Poco::Dynamic::Var;
using Poco::DynamicStruct;

void objPrint(Object& obj, const std::string& name = "")
{
    for (Object::ConstIterator it = obj.begin(),
        end = obj.end(); it != end; ++it)
    {
        if (!name.empty()) std::cout << name << ':';
        std::cout << it->first << ':';
        if (it->second.type() == typeid(Object::Ptr))
        {
            Object::Ptr p = it->second.extract<Object::Ptr>();
            objPrint(*p, it->first);
        }
        else
             std::cout << it->second.toString() << std::endl;
    }
}

int main(int, char**)
{
    typedef std::map<std::string, int> PersonMap;

    std::string timeStamp = "2015-05-14T17:47:21.999Z";
    Poco::Int32 identifier = 3;
    std::string name = "john smith";
    PersonMap metaData;
    metaData.insert(PersonMap::value_type("william", 45));

    Object obj(true);
    obj.set("ts", timeStamp);
    obj.set("name", name);
    obj.set("identifier", identifier);
    Object::Ptr pMD = new Poco::JSON::Object(true);
    for (PersonMap::iterator it = metaData.begin(),
        end = metaData.end(); it != end; ++it)
    {
        pMD->set("middle_name", it->first);
        pMD->set("age", it->second);
    }
    obj.set("metadata", pMD);

    std::ostringstream os;
    obj.stringify(os, 2);
    std::cout << os.str() << std::endl;

    Parser parser;
    Var result = parser.parse(os.str());

    Object::Ptr pObj = result.extract<Object::Ptr>();
    objPrint(*pObj);

    return 0;
}

poco JSON 的使用_yuhaiyang457288的专栏-CSDN博客

#include<iostream>
#include <stdint.h>
#include <sstream>
#include "Poco/JSON/Parser.h"
#include "Poco/JSON/ParseHandler.h"
#include "Poco/JSON/JSONException.h"
#include "Poco/StreamCopier.h"
#include "Poco/Dynamic/Var.h"
#include "Poco/JSON/Query.h"
#include "Poco/JSON/PrintHandler.h"


using namespace Poco::Dynamic;
using namespace Poco;
using std::string;

// json 的简单示例。
void JsonGet( )
{
    string jsonString = "{ \"name\" : \"yuhaiyang\" }";
    JSON::Parser parser;
    Dynamic::Var result;
    parser.reset();

    result = parser.parse( jsonString );
    JSON::Object::Ptr pObj = result.extract<JSON::Object::Ptr>();
    Dynamic::Var ret = pObj->get( "name2" );
    if ( ret.isEmpty() )
    {
        std::cout << "is null" << std::endl;
    }else
    {
        std::cout << ret.toString() << std::endl;
    }
}

//在 json 里加入数组。
void JsonArry( void )
{
    JSON::Object jsnObj;
    JSON::Array jsnArry;
    JSON::Object subObj1;
    JSON::Object subObj2;

    jsnObj.set( "command", "createuser" );

    subObj1.set( "name", "yuhaiyang");
    subObj1.set( "pass", "123" );

    subObj2.set( "name", "cj" );
    subObj2.set( "pass", "456" );

    jsnArry.add( subObj1 );
    jsnArry.add( subObj2 );

    jsnObj.set( "userinfo", jsnArry );

    std::stringstream  jsnString;
    jsnObj.stringify( jsnString, 3 );
    std::cout << jsnString.str() << std::endl;

}


//解析数据
void JsonGetArry( void )
{
/*-------------------构造包含Array的JSON(string类型)--------------------------------*/
    JSON::Object jsnObj;
    JSON::Array jsnArry;
    JSON::Object subObj1;
    JSON::Object subObj2;

    jsnObj.set( "command", "createuser" );

    subObj1.set( "name", "yuhaiyang");
    subObj1.set( "pass", "123" );

    subObj2.set( "name", "cj" );
    subObj2.set( "pass", "456" );

    jsnArry.add( subObj1 );
    jsnArry.add( subObj2 );

    jsnObj.set( "userinfo", jsnArry );

    std::stringstream  jsnOstream;
    jsnObj.stringify( jsnOstream, 3 );

    string jsnStr = jsnOstream.str();

    std::cout << "原数据:\n" << jsnStr << "\n\n\n" << std::endl;


    //--------------------------解析数组-----------------------------
    JSON::Parser parse;
    Dynamic::Var json = parse.parse( jsnStr );
    JSON::Object::Ptr pObj = json.extract<JSON::Object::Ptr>();
    JSON::Array::Ptr pArry = pObj->getArray( "userinfo" );

    JSON::Array::ConstIterator it = pArry->begin();
    //把数组里的所有内容打印出来
    //当然也可以把每个对象拿出来用。
    for ( ; it != pArry->end(); it++ )
    {
        std::cout << it->toString() << std::endl;
    }

}

int main()
{
    JsonGet();
    JsonArry();
    JsonGetArry();
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++json nlohmann 和 poco json 使用,boost 的相关文章

  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐

  • 多线程练习-基于 AtomicInteger 实现多线程自增同一个变量

    Atomic原子类有很多的类型 由于有原子性 所以实例化的变量在多线程中不会有线程安全问题 感兴趣的可以搜索 题目 基于 AtomicInteger 实现多线程自增同一个变量 代码及其注释 基于 AtomicInteger 实现多线程自增同
  • 蓝桥杯C++算法训练-拿金币(动态规划)

    问题描述 有一个N x N的方格 每一个格子都有一些金币 只要站在格子里就能拿到里面的金币 你站在最左上角的格子里 每次可以从一个格子走到它右边或下边的格子里 请问如何走才能拿到最多的金币 输入格式 第一行输入一个正整数n 以下n行描述该方
  • FPGA基本算术运算

    FPGA基本算术运算 FPGA基本算术运算 1 有符号数与无符号数 2 浮点数及定点数 I 定点数的加减法 II 定点数的乘除法 3 仿真验证 i 加减法验证 ii 乘除法验证 FPGA基本算术运算 FPGA相对于MCU有并行计算 算法效率
  • 生成对抗网络(GAN) 手写数字图像生成

    生成式对抗网络 GAN 简介 生成式对抗网络的框架主要有两个模型 一个是生成模型 Generator 记为为 G 是用来生成数据 通过大量的样本学习 生成一些能够以假乱真的数据样本 第二个是辨别模型 Discriminator 记为D 主要
  • CCF 2014年9月第一题--相邻数对(java)

    package com hsx ccf import java util Scanner public class Ccf20140901 public static void main String args SuppressWarnin
  • 注解和反射

    一 注解 1 什么是注解 注解说白了就是对程序做出解释 与我们在方法 类上的注释没有区别 但是注解可以被其他程序所读取 进行信息处理 否则与注释没有太大的区别 2 内置注解 内置注解就是我们的jdk所带的一些注解 常用的三个注解 Overr
  • 基于支持向量机SVM的图像多分类,SVM的详细原理

    目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 SVM应用实例 SVM图像多分类 代码 结果分析 展望 参考 支持向量机SVM的详细原理 SVM的定义 支持向量机 support vector machines SVM 是一种二
  • 软件模拟IIC驱动OLED 附源码

    软件模拟IIC驱动OLED 附源码 前言 CSDN上有很多的关于模拟IIC驱动的代码 都讲解的特别好 但对于想短时间理解并使用IIC的同学们而言是很枯燥困难的 所以我想由果到因 从写好的代码开始讲解IIC 希望可以帮助大家短时间掌握使用II
  • Springcloud连接nacos集群,nacos地址配置为nginx,报错:requst nacos server failed

    先说下版本 Spring cloud Hoxton SR12 spring cloud alibaba 2 2 9 RELEASE spring boot 2 3 12 RELEASE Linux Centos7 nacos server
  • 惠普Hp 战66 g3 amdR7-4800U,USB接口以及type-C速率/功能

    https h30471 www3 hp com t5 bi ji ben dian nao zhan66 san dai AMD14ying cun ban quan gong nengusbtypec jie kou zhi chi n
  • 【用户增长】找到用户增长的根本动因

    找到用户增长的根本动因 1 没有痛点的用户增长是不持久的 近几年创业的人越来越多 在这些创业失败的案例中 不乏一些 UI 设计非常漂亮的产品 但最终却因为用户增长做不起来而导致创业失败 这些产品失败的最主要原因就是没有找对痛点 没有需求也就
  • mysql内存使用分析(一)

    author skate time 2012 02 16 mysql内存使用分析 从内存的使用方式来说 MySQL数据库的内存使用主要分为以下两类 1 线程独享内存 2 全局共享内存 1 线程独享内存 在MySQL 中 线程独享内存主要用于
  • ledcode----丢失的数字

    目录 题目截图 题目接口 第一种解法 思路 第二种解法 差值法 思路 第三种解法 位运算异或法 关于异或操作符的预备知识 思路 例子 输入数组 0 1 3 根据题目要求消失的数字就是2 n 3 结语 题目截图 题目接口 int missin
  • React事件处理机制

    1 react事件并没有绑定到dom节点上而是绑定到了document 然后由统一的事件处理程序来处理 同时基于浏览器的事件冒泡机制 所有节点的事件会在document上触发 2 原生事件阻止冒泡会阻止合成事件的触发 合成事件的阻止冒泡不会
  • 虚拟机VMware Tools安装步骤

    Vmware tools是虚拟机中一款超级增强工具 可以让我们更加方便使用虚拟机 能实现主机与虚拟机之间的文件共享 这篇文章主要介绍了虚拟机VMware Tools安装步骤 需要的朋友可以参考下 本人安装VMware Tools 的需求是
  • 多线程抽取数据库数据

    记录一次多线成抽取数据的方案 public void static main String args 每页大小 int pageSize 100 总记录数 int totalCount ProductDAO countAll 计算一共有多少
  • java中Date日期类型的大小比较

    1 通过Date提供的compareTo 进行比较 java util Date类实现了Comparable接口 可以直接调用Date的compareTo 方法来比较大小 String beginTime 2018 07 28 14 42
  • Vue框架--Ruoyi解析

    Ruoyi是一个基于Vue js和Spring Boot的开源企业级快速开发平台 它提供了一套完整的前后端分离的解决方案 下面对Ruoyi的主要特点和架构进行解析 8大流程 前端技术栈 Ruoyi使用了Vue js作为前端框架 采用了Ele
  • android组件悬浮,Android 滑动组件悬浮固定在顶部

    要想实现的效果是如下 场景 有些时候是内容中间的组件当滑动至顶部的时候固定显示在顶部 实现的思路 1 目标组件 button 有两套 放在顶部和内容中间 2 当内容中间的组件滑动至顶部栏位置时控制显示 隐藏顶部和中间的组件 涉及到组件获取在
  • c++json nlohmann 和 poco json 使用,boost

    C 使用nlohmann json 最好用的c json库是 nlohmann C 使用nlohmann json wphkadn的博客 CSDN博客 把变量写成json容易 可是把json变成变量就要复杂一点 不过对于nlohmann一点