Разбор ответов JSON неизвестного формата для одного значения - PullRequest
0 голосов
/ 30 июня 2019

Я создаю фондовый скрининг, который получает данные от ultiple apis.Я хотел бы проанализировать ответы API от различных API для одного значения.

Я использую API данных запаса, которые возвращают JSON в разных вложенных форматах.Поскольку формат JSON может быть другим, например, root может быть объектом или массивом. У меня проблемы с пониманием, как это сделать.Я успешно проанализировал ответы JSON, когда известен формат.Я использую qt без сторонних библиотек, которые, кажется, требуют, чтобы вы проанализировали эти ответы точно, как я делал ранее.Как мне создать общий JSON-парсер?Возможно ли это вообще?

Пример. Для этого ответа JSON.1008 *

{
  "date": "2019-06-28",
  "value": 197.92
}

Я пытаюсь не писать функцию парсера для каждого API, который я использую.Я хотел бы быть в состоянии найти, если JSON имеет "значение" и, если да, вернуть его значение.

1 Ответ

0 голосов
/ 10 июля 2019

Для этого вы можете использовать JsonPath . Например, используя jsoncons реализацию JsonPath, вы можете написать

#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...