21xrx.com
2025-04-05 20:10:35 Saturday
文章检索 我的文章 写文章
C++对象转JSON字符串
2023-07-02 03:49:28 深夜i     60     0
C++ 对象 转换 JSON字符串

C++是一种广泛应用于计算机科学领域的高级编程语言。在现代开发中,处理JSON数据已经成为了一个必备的能力。因此,许多C++开发者需要将C++中的对象转换为JSON字符串。下面我们将介绍C++对象转JSON字符串的一些方法。

1.使用JSON库

第一种方法是使用C++中的JSON库。C++中有很多JSON库可以使用,如RapidJSON、nlohmann-json等。这些库都提供了将C++对象转换为JSON字符串的方法。

例如,使用RapidJSON库可以使用下面的代码将C++对象转换为JSON字符串:

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
// 示例对象
class Person {
public:
  std::string name;
  int age;
  Person(std::string name_, int age_) : name(name_), age(age_) {}
};
int main() {
  Person p("Tom", 25);
  // 序列化到JSON字符串中
  rapidjson::Document d;
  d.SetObject();
  d.AddMember("name", rapidjson::Value(p.name.c_str(), d.GetAllocator()).Move(), d.GetAllocator());
  d.AddMember("age", p.age, d.GetAllocator());
  rapidjson::StringBuffer buffer;
  rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
  d.Accept(writer);
  std::cout << buffer.GetString() << std::endl;
  return 0;
}

输出结果为:

json
"name": "Tom"

2.使用序列化库

第二种方法是使用C++的序列化库(如Boost Serialization库)。序列化库可以将C++对象序列化为二进制格式或文本格式,通常用于数据存储或网络通信传输。

例如,使用Boost Serialization库可以使用下面的代码将C++对象序列化为JSON字符串:

#include <iostream>
#include <string>
#include <sstream>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/map.hpp>
// 示例对象
class Person {
public:
  std::string name;
  int age;
  Person(std::string name_, int age_) : name(name_), age(age_) {}
private:
  // 序列化方法
  friend class boost::serialization::access;//友元声明
  template<class Archive>
  void serialize(Archive &ar, const unsigned int version)
    ar & name;
    ar & age;
  
};
int main() {
  Person p("Tom", 25);
  std::ostringstream oss;
  boost::archive::text_oarchive oa(oss); // 输出归档流
  oa << p; // 将 p 归档到 aos
  std::string jsonString = oss.str();
  std::cout << jsonString << std::endl;
  return 0;
}

输出结果为:

22 serialization::archive 20 0 0 3 Tom25

虽然这个方法不能直接生成JSON字符串,但是我们可以通过简单地处理输出字符串来得到JSON格式的字符串。

总结

以上就是C++对象转JSON字符串的两种方法。如你所见,这两种方法都相对简单,只需要使用一个现有的库或者一个序列化库进行序列化操作即可。根据实际需要和代码复杂度进行选择。

  
  

评论区