- 操作系统: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
- 将
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
- 修改
lib_json/xxx.cpp
中头文件的路径
例如lib_json/json_value.cpp
,将与json
有关的头文件改为
#include "../json/value.h"
#include "../json/writer.h"
- 修改
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实例如下,names
和values
下是希望取出的数据
{
"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函数冲突