官方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
也可以通过安装包链接路径进行安装,可以参考:
也可以直接放到工程项目里而不作为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
的环境,可以再查阅些其他资料
头文件
#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函数冲突