Я анализирую файл 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"]; }
};
Знаки вопроса в последней строке представляют мою путаницу в том, как указать тип возвращаемого значения этой функции.
Одна из приятных особенностей этой библиотеки заключается в том, что преобразования в стандартные типы являются встроенными и выполняют то, что вы хотите, чтобы они делали (библиотека также предоставляет механизм для выполнения преобразований в предоставленные пользователем типы и из них).
В этом случае вы можете просто использовать это:
std::vector<int> getImageResizeDims() {
return data["image_captureOptions"]["imageResizeDims"];
}
Если подобъект json во время выполнения не может быть преобразован в std::vector<int>
, что преобразование бросит type_error
,
Других решений пока нет …