gpt4 book ai didi

c++ - 如何使用基于范围的 for 循环遍历本身是 JSON 数组的 Rapidjson 文档?

转载 作者:行者123 更新时间:2023-11-28 04:05:03 25 4
gpt4 key购买 nike

我一直在尝试解析如下所示的 JSON 字符串:

[1, 2, 3, 4]

这是我的代码:

#include <iostream>
#include "rapidjson/document.h"

void main()
{
char const *json_str = "[1, 2, 3, 4]";
rapidjson::Document d;
d.Parse(json_str);
// Ninja edit to fix json_str.IsArray()
if(d.IsArray())
{
for(auto &e: d)
{
std::cout << e.GetInt() << std::endl;
}
}
}

不幸的是,代码无法编译,出现“begin() 未在此范围内声明”和其他同类错误。

这表明我正在尝试迭代无法调用 std::begin() 和 std::end() 的内容。

rapidjson 教程 here仅说明如何遍历使用 GetArray() 检索的数组,而不是在文档级别。我也浏览了文档,并在谷歌上搜索但运气不佳。我也尝试使用:

for(auto &e: document.GetArray()) // Similar to the tutorial's code, which calls d.GetObject()

但这并不能说明 GenericDocument(Document 是一个 typedef,AFAIK)没有名为 GetArray() 的成员。就此而言,它也没有 GetObject() 成员。

另一方面,使用计数器进行迭代工作得很好。

我可能遗漏了一些明显的东西,因为这是漫长的一天,现在是我所在地区的凌晨 12:00,但我非常感谢任何关于我可能出错的地方以及如何完成它的指示任务。

最佳答案

d.GetArray() 是将文档转换为数组的正确方法。

但是在您的示例中,您是在输入字符串而不是 Document 实例上调用 IsArray()

以下代码适用于我:

#include <iostream>
#include <rapidjson/document.h>

int main() {
char const* json_str = "[1, 2, 3, 4]";
rapidjson::Document d;
d.Parse(json_str);
if (d.IsArray())
{
for (auto& e : d.GetArray())
{
std::cout << e.GetInt() << std::endl;
}
}
}

输出:

1
2
3
4

关于c++ - 如何使用基于范围的 for 循环遍历本身是 JSON 数组的 Rapidjson 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58883011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com