C++ тип возврата функции, возвращающей массив json через nlohmann json.hpp

Я анализирую файл json с помощью nlohmann's json.hpp. Часть файла json, которая меня интересует, выглядит следующим образом:

"image_captureOptions": {
    "captureInterval" : 1000,
    "captureLimit" : 5,
    "imageExtension" : "jpg",
    "imageResizeDims" : [640, 480]
},
...

Соответствующие части класса, которые анализируют JSON, выглядят так:

namespace json = nlohmann;

class ConfigReader {

    json::json data;

    void readConfigFile(std::string path) {
        std::ifstream inputStream(path);

        inputStream >> data;
}

public:
    ConfigReader() {

    static const std::string defaultPath = "config.json";

    readConfigFile(defaultPath);
}

    int getImageCaptureInterval() { return data["image_captureOptions"]["captureInterval"]; }
    int getImageCaptureLimit() { return data["image_captureOptions"]["captureLimit"]; }
    std::string getImageExtension() { return data["image_captureOptions"]["imageExtension"]; }
    ???? getImageResizeDims() { return data["image_captureOptions"]["imageResizeDims"]; }
};

Знаки вопроса в последней строке представляют мою путаницу в том, как указать тип возвращаемого значения этой функции.

1 ответ

Решение

Одна из приятных особенностей этой библиотеки заключается в том, что преобразования в стандартные типы являются встроенными и выполняют то, что вы хотите, чтобы они делали (библиотека также предоставляет механизм для выполнения преобразований в предоставленные пользователем типы и из них).

В этом случае вы можете просто использовать это:

std::vector<int> getImageResizeDims() {
    return data["image_captureOptions"]["imageResizeDims"];
}

Если подобъект json во время выполнения не может быть преобразован в std::vector<int>, что преобразование бросит type_error,

Другие вопросы по тегам