[英]Parsing JSON Responses Of Unknown Format For Single Value
我正在创建一个股票筛选器,该筛选器从多个API中获取数据。 我想解析来自各种api的api响应,以获得单个值。
我正在使用以不同嵌套格式返回JSON的股票数据API。 由于JSON的格式可以不同,例如root可以是对象或数组。。我在理解如何执行此操作时遇到了麻烦。 当格式已知时,我已经成功解析了JSON响应。 我正在使用没有第三方库的qt,这似乎要求您像我之前所做的那样显式地解析这些响应。 如何创建一个通用的JSON解析器? 这有可能吗?
示例:对于此JSON响应。我想解析“值”
{
"historical_data": [
{
"date": "2019-06-28",
"value": 197.92
}
],
"security": {
"id": "sec_agjrgj",
"company_id": "com_NX6GzO",
"stock_exchange_id": "sxg_ozMr9y",
"name": "Apple Inc",
"code": "EQS",
"currency": "USD",
"ticker": "AAPL",
"composite_ticker": "AAPL:US",
"figi": "BBG000B9Y5X2",
"composite_figi": "BBG000B9XRY4",
"share_class_figi": "BBG001S5N8V8"
},
"next_page": null
}
我也想解析此JSON repsone的“值”
{
"date": "2019-06-28",
"value": 197.92
}
我试图不为我使用的每个API编写解析器函数。 我希望能够找到JSON是否具有“值”,如果有,则返回其值。
您可以为此使用JsonPath 。 例如,使用JsonPath的jsoncons实现,您可以编写
#include <iostream>
#include <jsoncons/json.hpp>
#include <jsoncons_ext/jsonpath/json_query.hpp>
using namespace jsoncons;
int main()
{
std::string data = /* your JSON response */;
json root = json::parse(data);
// json_query returns an array of items that match the JsonPath expression
json result = jsonpath::json_query(root, "$..value");
for (const auto& item : result.array_range())
{
std::cout << item << "\n";
}
}
输出:
197.92
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.