c++ - 为单个值解析未知格式的 JSON 响应
问题描述
我正在创建一个从多个 api 获取数据的股票筛选器。我想为单个值解析来自各种 api 的 api 响应。
我正在使用以不同嵌套格式返回 JSON 的股票数据 api。由于 JSON 的格式可以不同,例如 root 可以是一个对象或一个数组。我无法理解如何去做。当格式已知时,我已成功解析 JSON 响应。我正在使用 qt,没有 3rd 方库,这似乎需要您像我之前所做的那样明确解析这些响应。如何创建一个通用的 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 响应以获取“值”
{
"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
推荐阅读
- html - 如何仅使用 css 重现duckduckgo 搜索的图片库效果
- javascript - 我可以通过哪种方式在 OpenLayers 6 中实现风层?
- javascript - 我们可以在 vercel 中部署 Nextjs 应用程序进行生产吗?它可以处理大流量吗?
- java - 使用 java 从 mongoDb 中删除嵌入的文档
- c# - 针对子集合的流利验证 - 如何在 MVC 中显示错误消息
- kibana - Kibana 可视化。可视化 URL,但分组相同的路径
- reactjs - 如何在桌面上获得更大的模态?
- windows - 当隐藏在防火墙后面时,RDP 服务是否对外/公开可见?
- batch-file - bat 文件 # 在 DOScall 中
- r - 可以改进 R 包 readODS,因为它在安装期间在 Linux 上给出错误