c++json解析-jsoncpp的使用

前言

c++中解析json大多数都用jsoncpp这个库,但jsoncpp下载下来的一堆文件看不懂,实际上在项目中使用的话需要二次编译。我希望编译出来的文件能简单且在windows和linux上同时使用,但网上并没有对此作出详细介绍,自己总结了一下,并简单封装了json解析


链接:github上下载jsoncpp库

使用json有两种方法,一种是直接使用json的.cpp和.h文件,另一种是编译出静态链接库,在项目中使用静态库

注意:github上的源码好像无法用vs编译出静态库的

一、生成.cpp和.h文件

  1. 下载github上jsoncpp的源码

image-20220801155436287

  1. 下载完成后解压,进入目录,通过python命令构建头文件和源文件(貌似这个方法比较简单)

打开cmd,进入文件目录

image-20220801155914475

在通过python命令构建头文件和源文件之前需要安装python

链接:Windows下Python的安装与使用

构建

python amalgamate.py

会在当前文件夹下生成dist目录

将dist中的文件拷到自己的项目中,并添加到项目,尽量不要更改.cpp和.h文件的目录结构

image-20220801160120609

使用时记得包含头文件

#include "json/json.h"
#include "json/json-forwards.h"

这种方法思路简单,windows和linux应该都可以用

二、编译静态链接库

这种方法windows和linux需要编译出不同的库,且不同编译器导入库的方法也不同

该种方式需要使用官网中的jsoncpp

链接:jsoncpp官网

鉴于这种方法较为复杂,就不详细介绍了,下面这篇博客介绍了viusal studio中使用静态链接库(viusal studio生成的静态库qt也可以使用,但不清楚如何生成linux中的静态库)

链接:JsonCpp的基本用法


json案例:

{
    
    
  "StatusCode": 200,
  "ErrCode": 0,
  "Msg": "success",
  "Data": [
    {
    
    
      "SchoolID": "S-05061410",
      "schoolName": "北京大学",
      "SchoolType": 1
    },
    {
    
    
      "SchoolID": "S-05061411",
      "schoolName": "东南大学",
      "SchoolType": 5
    }
  ]
}

字符串转为json及json解析

	std::string str = "{\"StatusCode\": 200,\"ErrCode\" : 0,\"Msg\" : \"success\",\"Data\" : [{\"SchoolID\": \"S-05061410\",\"schoolName\" : \"北京大学\",\"SchoolType\" : 1},{\"SchoolID\": \"S-05061411\",\"schoolName\" : \"东南大学\",\"SchoolType\" : 5}]}";
	std::string str1=string_To_UTF8(str);
	Json::Reader reader;
	Json::Value value1;

	// reader将Json字符串str解析到value
	if (reader.parse(str1, value1))
	{
    
    
        //json转int
		int StatusCode = value1["StatusCode"].asInt();
		int ErrCode = value1["ErrCode"].asInt();
        //json转string
		std::string Msg = value1["Msg"].asString();
        //json数组转json
		Json::Value Data = value1["Data"];
		//遍历数组
		for (int i = 0; i < Data.size(); i++)
		{
    
    
			std::string SchoolID = Data[i]["SchoolID"].asString();
			std::string schoolName = Data[i]["schoolName"].asString();
			int SchoolType = Data[i]["SchoolType"].asInt();
		}
	}

json转字符串

	//json转字符串
	Json::FastWriter fast_writer;
	auto str2 = fast_writer.write(value1);	//value1转为str2

注意:json默认是要utf-8编码的,正常编译器都是unicode编码,所以json在使用过程中大概率会出现乱码问题,需要看情况进行正确的转码

码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方

猜你喜欢

转载自blog.csdn.net/weixin_44092851/article/details/126104716