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

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

  • 在Linux上配置jsoncpp(详细图文教程)_纯粹的博客-CSDN博客
  • linux 安装jsoncpp_u013250424的专栏-CSDN博客_linux 安装ujson
  • C++通过JsonCpp读取Json文件 - 山上有风景 - 博客园

也可以直接放到工程项目里而不作为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函数冲突

你可能感兴趣的:(c++,json)