如何反序列化数组?
How to deserialize an array?
我将 nlohmann::json 库用于 json
中的 serialize/deserialize 个元素。
下面是我如何序列化 C++
双精度数组:
double mLengths[gMaxNumPoints] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
...
nlohmann::json jsonEnvelope;
jsonEnvelope["lengths"] = envelope.mLengths;
产生:
"lengths":[
1.0,
2.0,
3.0,
4.0,
5.0
]
但是现在,我怎样才能反序列化回 mLengths
?尝试过:
mLengths = jsonData["envelope"]["lengths"];
但是它说 expression must be a modifiable lvalue
。我怎样才能恢复数组?
我手头没有图书馆,但它应该是这样的:
auto const &array = jsonData["envelope"]["lengths"];
if(!array.is_array() || array.size() != gMaxNumPoints) {
// Handle error, bail out
}
std::copy(array.begin(), array.end(), mLengths);
std::copy
舞蹈是必要的,因为 C 风格的数组,顾名思义,是一个非常简单的容器,其规范几乎是从 C 中复制过来的。因此,它不是可分配(也不可复制或移动构造)。
它适用于矢量:
#include <iostream>
#include <nlohmann/json.hpp>
int main() {
double mLengths[] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
nlohmann::json j;
j["lengths"] = mLengths;
std::cout << j.dump() << "\n";
std::vector<double> dbs = j["lengths"];
for (const auto d: dbs)
std::cout << d << " ";
std::cout << "\n";
return 0;
}
通过赋值进行反序列化不适用于 C 数组,因为您无法为它们正确定义转换运算符。
我将 nlohmann::json 库用于 json
中的 serialize/deserialize 个元素。
下面是我如何序列化 C++
双精度数组:
double mLengths[gMaxNumPoints] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
...
nlohmann::json jsonEnvelope;
jsonEnvelope["lengths"] = envelope.mLengths;
产生:
"lengths":[
1.0,
2.0,
3.0,
4.0,
5.0
]
但是现在,我怎样才能反序列化回 mLengths
?尝试过:
mLengths = jsonData["envelope"]["lengths"];
但是它说 expression must be a modifiable lvalue
。我怎样才能恢复数组?
我手头没有图书馆,但它应该是这样的:
auto const &array = jsonData["envelope"]["lengths"];
if(!array.is_array() || array.size() != gMaxNumPoints) {
// Handle error, bail out
}
std::copy(array.begin(), array.end(), mLengths);
std::copy
舞蹈是必要的,因为 C 风格的数组,顾名思义,是一个非常简单的容器,其规范几乎是从 C 中复制过来的。因此,它不是可分配(也不可复制或移动构造)。
它适用于矢量:
#include <iostream>
#include <nlohmann/json.hpp>
int main() {
double mLengths[] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
nlohmann::json j;
j["lengths"] = mLengths;
std::cout << j.dump() << "\n";
std::vector<double> dbs = j["lengths"];
for (const auto d: dbs)
std::cout << d << " ";
std::cout << "\n";
return 0;
}
通过赋值进行反序列化不适用于 C 数组,因为您无法为它们正确定义转换运算符。