首页 > 其他分享 >nlohmann / json 使用

nlohmann / json 使用

时间:2022-10-11 16:37:32浏览次数:133  
标签:CP len nlohmann json wstr str 使用 NULL

 

   下载地址

    https://github.com/nlohmann/json/tree/develop/single_include/nlohmann/json.hpp

   引入工程

   json.hpp是源文件包含了所有的函数,引入头文件在 .cpp文件即可;

   json.hpp 文件的目录是项目工程 include文件子目录下;

#include "include/nlohmann/json.hpp"
using namespace std;
using json = nlohmann::json;

    

  编写代码时注意点:

  复杂json结构通过多层json 结构嵌套,代码如下:

    json j;
    j["name"] = "xxxx";    
    for (size_t i = 0; i < 3; i++)
    {
        json js;
        js["num"] = i;
        j["nums"][i] = js;
    }

 

    VS 使用 json 常见问题:

    中文出错;

        JSON_THROW(type_error::create(316, concat("invalid UTF-8 byte at index ", std::to_string(i), ": 0x", hex_bytes(byte | 0)), nullptr));

      解决办法:

      使用 GbkToUtf8 对中文提前转码;  (如有其他好的方法,望回复!!!)

       如: 

   json j; // 首先创建一个空的json对象
    
    j["name"] = GbkToUtf8("某某某") ;

    转码代码如下:   

string GbkToUtf8(const char* src_str)
{
    int len = MultiByteToWideChar(CP_ACP, 0, src_str, -1, NULL, 0);
    wchar_t* wstr = new wchar_t[len + 1];
    memset(wstr, 0, len + 1);
    MultiByteToWideChar(CP_ACP, 0, src_str, -1, wstr, len);
    len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
    char* str = new char[len + 1];
    memset(str, 0, len + 1);
    WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
    string strTemp = str;
    if (wstr) delete[] wstr;
    if (str) delete[] str;
    return strTemp;
}

string Utf8ToGbk(const char* src_str)
{
    int len = MultiByteToWideChar(CP_UTF8, 0, src_str, -1, NULL, 0);
    wchar_t* wszGBK = new wchar_t[len + 1];
    memset(wszGBK, 0, len * 2 + 2);
    MultiByteToWideChar(CP_UTF8, 0, src_str, -1, wszGBK, len);
    len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
    char* szGBK = new char[len + 1];
    memset(szGBK, 0, len + 1);
    WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
    string strTemp(szGBK);
    if (wszGBK) delete[] wszGBK;
    if (szGBK) delete[] szGBK;
    return strTemp;
}

 

  

 

标签:CP,len,nlohmann,json,wstr,str,使用,NULL
From: https://www.cnblogs.com/susiesnai-sun/p/16779631.html

相关文章

  • Python pdb模块的使用
    野路子出生,写Python也有段时间了,一般的调试都用的print,PyCharm的debug功能也用的比较少,主要一般也用不到,第二是自己也不怎么会用. 服务器开发,本地根本没有运行的环境,......
  • mac使用php命令模式非常卡怎么办?
    问题刚换了台老爷机刷上了Mojave,成功吃水果,偷懒用一键环境装了个php7.1,为什么不自己编译,可以但没必要emmmmmmmm....然后发现居然奇卡无比,总会有几秒的延迟排查timephp......
  • 使用公私钥认证的方式进行linux的ssh登录
    1.客户端(kali)下生成公钥/私钥命令:ssh-keygen2.之后在.ssh文件夹内生成两个文件,分别为:私钥id_rsa和公钥id_rsa.pub3.之后在客户端使用命令,ssh-copy-id用户名@id(解析:使用......
  • va_start和va_end使用详解
    本文主要介绍va_start和va_end的使用及原理。在以前的一篇帖子FormatMessageBox详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。介绍这两个......
  • NETCORE中如何操作Appsettings.json 文件
    对于很多初学NETCORE的同学来说,怎么从appsettings.json文件中获取各种类型数据,一直没搞明白。今天我们就对它的几种数据格式的读取做个说明。appsettings.json 是我们......
  • 如何使用物联网低代码平台进行报表管理?
    报表是统计分析的重要工具,AIRIOT物联网低代码平台提供了强大的报表系统,支持报表管理定义、报表分类、添加报表、普通报表和自由报表等功能,具有很强的灵活性。如何使用A......
  • 使用SQL进行集合查询和数据维护
    使用SQL进行集合查询和数据维护文章目录​​使用SQL进行集合查询和数据维护​​​​1.分别查询“计科系学生”和“所有男生”的并集,交集和差集。(15分)​​​​2.**查询选修了......
  • PyPackage01---Pandas10_apply方法使用
    Intro  R里面apply族函数很强大,原来以为python的是阉割版,没想到也很强大,还是需要多看看文档。。。相关环境和package信息:importsysimportpandasaspdimportnumpyas......
  • Final Cut Pro for Mac(fcpx视频剪辑)v10.6.4中文直装版 永久使用
    FinalCutPro forMac是一款专业视频非线性编辑器,FinalCutPro拥有创新的视频编辑方式,强大的媒体整理功能,优化输出视频效果,并可编辑iPhone13及iPhone13Pro上以「......
  • nprogress 进度条的使用
    start:进度条开始done:进度条结束进度条样式可以改,当然需要修改人家的样式importaxiosfrom'axios'//引入进度条//start进度条开始done进度条结束importnpro......