提升:解析 json 文件并获得 child
boost: parse json file and get a child
我正在尝试使用以下函数解析 JSON 文件:
std::string getFieldFromJson_data(std::string json, std::string field)
{
std::stringstream jsonEncoded(json); // string to stream convertion
boost::property_tree::ptree root;
boost::property_tree::read_json(jsonEncoded, root);
if (root.empty())
return "";
return (root.get<std::string>(field));
}
在阅读像
这样的元素时有效
device_json.data_device_id = stoi(getFieldFromJson_data(output, "data.device_id"));
我的 JSON 文件类似于:
{
"data": {
"device_id": 67,
"place_open": {
"monday": [
"10:15","19:30"
]
}
}
}
我可以读取“data.device_id”的值,但是当我尝试读取“data.place_open.monday”的值时,我得到一个空字符串。
使用 JSON 库。 属性 Tree 不是 JSON 图书馆。使用 Boost JSON 和 JSON 指针:
#include <boost/json.hpp>
#include <boost/json/src.hpp> // for header-only
#include <iostream>
#include <string_view>
auto getField(std::string_view json, std::string_view field) {
return boost::json::parse(json).at_pointer(field);
}
int main() {
auto output = R"({
"data": {
"device_id": 67,
"place_open": {
"monday": ["10:15", "19:30"]
}
}
})";
for (auto pointer : {
"/data",
"/data/device_id",
"/data/place_open/monday",
"/data/place_open/monday/0",
"/data/place_open/monday/1",
})
std::cout << pointer << " -> " << getField(output, pointer) << std::endl;
}
版画
/data -> {"device_id":67,"place_open":{"monday":["10:15","19:30"]}}
/data/device_id -> 67
/data/place_open/monday -> ["10:15","19:30"]
/data/place_open/monday/0 -> "10:15"
/data/place_open/monday/1 -> "19:30"
我正在尝试使用以下函数解析 JSON 文件:
std::string getFieldFromJson_data(std::string json, std::string field)
{
std::stringstream jsonEncoded(json); // string to stream convertion
boost::property_tree::ptree root;
boost::property_tree::read_json(jsonEncoded, root);
if (root.empty())
return "";
return (root.get<std::string>(field));
}
在阅读像
这样的元素时有效device_json.data_device_id = stoi(getFieldFromJson_data(output, "data.device_id"));
我的 JSON 文件类似于:
{
"data": {
"device_id": 67,
"place_open": {
"monday": [
"10:15","19:30"
]
}
}
}
我可以读取“data.device_id”的值,但是当我尝试读取“data.place_open.monday”的值时,我得到一个空字符串。
使用 JSON 库。 属性 Tree 不是 JSON 图书馆。使用 Boost JSON 和 JSON 指针:
#include <boost/json.hpp>
#include <boost/json/src.hpp> // for header-only
#include <iostream>
#include <string_view>
auto getField(std::string_view json, std::string_view field) {
return boost::json::parse(json).at_pointer(field);
}
int main() {
auto output = R"({
"data": {
"device_id": 67,
"place_open": {
"monday": ["10:15", "19:30"]
}
}
})";
for (auto pointer : {
"/data",
"/data/device_id",
"/data/place_open/monday",
"/data/place_open/monday/0",
"/data/place_open/monday/1",
})
std::cout << pointer << " -> " << getField(output, pointer) << std::endl;
}
版画
/data -> {"device_id":67,"place_open":{"monday":["10:15","19:30"]}}
/data/device_id -> 67
/data/place_open/monday -> ["10:15","19:30"]
/data/place_open/monday/0 -> "10:15"
/data/place_open/monday/1 -> "19:30"