使用 minijson-reader 库读取 JSON 字符串时出现问题
problem reading json string with minijson-reader library
在尝试解析我的 c++ 代码中的 json 字符串时,使用 minijson 库,到目前为止,我得到了这样的代码:
<<"version">> [&]() { result.setVersion(v.as_long()); }
<<"capabilities">> [&]()
{
parse_array(ctx, [&](value capability)
{
result.getCapabilities().push_back(capability.as_string());
});
}
数据应存储在以下struct
:
struct block_template {
int version;
vector<string> capabilities;
...
}
version
值存储正确,但矢量大小保持为 0。我尝试可视化从 json 字符串(带cout << capability.as_string() << endl
(读取的数据,并且它显示正确,只是没有存储在数据结构中。
任何已经使用过这个库的人都可以提示这里出了什么问题?
由于 OP 要求在注释中使用其他库的示例,因此我将更笼统地回复。
在 jsoncons 中,如果 JSON 成员名称和C++变量名称相同,则可以使用宏JSONCONS_ALL_MEMBER_TRAITS
来设置映射,
#include <iostream>
#include <jsoncons/json.hpp>
struct block_template {
int version;
std::vector<std::string> capabilities;
};
JSONCONS_ALL_MEMBER_TRAITS(block_template, version, capabilities)
int main()
{
std::string input = R"(
{
"version" : 1,
"capabilities" : ["foo","bar","baz"]
}
)";
auto result = jsoncons::decode_json<block_template>(input);
std::cout << "(1)n" << "version: " << val.version << "n";
for (auto& item : val.capabilities)
{
std::cout << "item: " << item << "n";
}
std::string output;
jsoncons::encode_json(val, output, jsoncons::indenting::indent);
std::cout << "(2)n" << output << "nn";
}
输出:
(1)
version: 1
item: foo
item: bar
item: baz
(2)
{
"capabilities": ["foo", "bar", "baz"],
"version": 1
}
如果 JSON 和C++名称不同,则可以改用宏JSONCONS_ALL_MEMBER_NAME_TRAITS
,
JSONCONS_ALL_MEMBER_NAME_TRAITS(block_template, (version,"Version"),
(capabilities,"Capabilities"))
通过此更改,输出将变为:
(1)
version: 1
item: foo
item: bar
item: baz
(2)
{
"Capabilities": ["foo", "bar", "baz"],
"Version": 1
}
有关将JSON解码为C++数据结构并重新编码的库的更多示例,请参阅此答案,包括Martin York有趣的ThorsSerializer。
相关文章:
- 编译包含字符串的代码时遇到问题
- setlocale的C++土耳其字符串问题
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 我的逻辑反转字符串中的元音有什么问题?
- 按字母顺序对C++问题中的子字符串索引进行分区
- 用户输入字符串的文件附加问题..C++
- 使用 minijson-reader 库读取 JSON 字符串时出现问题
- 在将字符串放入字符串向量时遇到问题?
- 将文件复制到自定义位置,存在字符串转换问题
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 不确定出了什么问题(字符串输入)
- 反向和计数字符串的 C++ 问题
- 反转具有返回值的字符串时出现问题
- C++字符串问题-如何访问字符串元素
- public:静态常量字符串声明/初始化问题
- 在MySql中使用字符串操作函数有什么问题
- Libwesockets.h:lws_write:C++字符串到C的转换和发送问题
- 问题:字符串在另一个字符串上写入
- 日志文件输出的问题-字符串和c_str之间的差异- c++