C++使用JsonCpp从string中读取json数据

  • 操作系统:Ubuntu 18.04
  • 编译环境:ROS catkin_make

安装JsonCpp环境

📦官方repo:GitHub - open-source-parsers/jsoncpp: A C++ library for interacting with JSON.

核心是两个文件夹
- jsoncpp/include/json/中的头文件
- jsoncpp/src/lib_json/中的源码

如果是linux,可以直接通过如下命令安装

sudo apt-get install libjsoncpp-dev

Resources

也可以通过安装包链接路径进行安装,可以参考:

也可以直接放到工程项目里而不作为lib

  1. json/lib_json/和源码放到同一路径下,如下所示
.
├── CMakeLists.txt
├── include
│   └── ...
└── src
    ├── json
    │   ├── json.h
    │   ├── reader.h
    │   ├── value.h
    │   ├── writer.h
    │   └── ...
    ├── lib_json
    │   ├── json_reader.cpp
    │   ├── json_value.cpp
    │   ├── json_writer.cpp
    │   └── ...
    └── main.cpp
  1. 修改lib_json/xxx.cpp中头文件的路径
    例如lib_json/json_value.cpp,将与json有关的头文件改为
#include "../json/value.h"
#include "../json/writer.h"
  1. 修改CMakeLists.txt
    添加可执行文件链接
add_executable(main src/main.cpp src/lib_json/json_reader.cpp src/lib_json/json_writer.cpp src/lib_json/json_value.cpp)
target_link_libraries(main ${catkin_LIBRARIES})

【报错:undefine Json::Value xxx之类的】
可能是由于lib_json中的头文件路径改的不全,或是write, read, value没有同时添加到编译中,根本原因都是没有配置好jsoncpp的环境,可以再查阅些其他资料

string转json并读取数据

头文件

#include "json/json.h"
#include "json/reader.h"
#include "json/writer.h"
#include "json/value.h"

json实例如下,namesvalues下是希望取出的数据

{
    "results": [
        {
            "series": [
                {
                    "names": [  ],
                    "values": [   ]
                }
            ]
        }
    ]
}

实例代码如下

Json::Reader reader;
Json::Value root;
if(reader.parse(resp, root))
{
    cout << root << endl;       // 输出如上形式的Json::Value对象

    Json::Value valuesArrayObj = root["results"][int(0)]["series"][int(0)]["values"];   // 取出所需数据

    cout << typeid(valuesArrayObj).name() << endl;      // N4Json5ValueE类型封装好的数据

    cout << valuesArrayObj[0];          //可以通过下标索引
}

注意索引json数组时要使用int(0),否则会报overload函数冲突

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在C++使用JsonCpp库来读取JSON文件,你可以按照以下步骤进行操作: 1. 首先,确保已经下载并安装了JsonCpp库,并将其包含在你的项目。 2. 创建一个Json::Value对象来存储解析后的JSON数据。 3. 使用Json::Reader对象来读取JSON文件并解析为Json::Value对象。 下面是一个简单的示例代码,演示了如何使用JsonCpp读取JSON文件: ```cpp #include <iostream> #include <fstream> #include <json/json.h> int main() { // 读取 JSON 文件 std::ifstream jsonFile("example.json"); if (!jsonFile.is_open()) { std::cout << "Failed to open JSON file." << std::endl; return 1; } // 解析 JSON 数据 Json::Value root; Json::Reader reader; if (!reader.parse(jsonFile, root)) { std::cout << "Failed to parse JSON data." << std::endl; return 1; } // 读取 JSON 数据并输出 std::string name = root["name"].asString(); int age = root["age"].asInt(); std::string city = root["city"].asString(); std::cout << "Name: " << name << std::endl; std::cout << "Age: " << age << std::endl; std::cout << "City: " << city << std::endl; return 0; } ``` 在上面的示例,我们首先打开了一个名为`example.json`的JSON文件,然后使用JsonCppJson::Reader对象解析JSON数据,并将其存储在名为`root`的Json::Value对象。接下来,我们通过访问`root`对象的键值对来获取JSON数据,并将其输出到控制台上。 请确保将示例代码的`example.json`替换为你实际使用JSON文件的路径。 这里提供一个CSDN上的相关教程供参考:[https://blog.csdn.net/qq_41453285/article/details/105808014](https://blog.csdn.net/qq_41453285/article/details/105808014)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

doubleZ0108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值