rapidJson 的断言失败

问题描述 投票:0回答:3

我正在尝试使用 RapidJson 在 C++ 中解析 json 数据。我不知道我哪里做错了,但我的断言失败了。当我尝试调试它在运行断言行时显示 sigabrt 时。社区我很欣赏你的见解。感谢您回答这个天真的问题。

#include <iostream>
#include <assert.h>
#include "hpdf.h"
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include <rapidjson/istreamwrapper.h>
#include <fstream>

int main() {

    std::ifstream ifs("/home/is/..../test.json");
    rapidjson::IStreamWrapper isw(ifs);

    rapidjson::Document document;
    document.ParseStream(isw);


    assert(document.IsObject());

    rapidjson::Value::MemberIterator hello = document.FindMember("timeStamp");
    std::string vali = document["timestamp"].GetString();
    std::cout << vali << std::endl;

    return 0;

}

我也尝试使用rapidJson filestream,但在同一行再次失败。

[
  {
    "timeStamp": "...",
    "alertType": "...",
    "instanceId": 8

   }
  ]
c++ rapidjson
3个回答
1
投票

阅读有关 JSON 的更多信息。

您的输入文档(以

[
开头)是一个包含单个 JSON 对象的 JSON 数组。

我建议使用

document.GetType()
然后对其结果进行不同的处理(也许使用
switch
)。

所以

document.IsObject()
为假也是正常的。对于您的输入
document.IsArray()
应该为 true,并且可以通过
document[0]

访问该数组内的 JSON 对象

1
投票

99% 的人认为你的 JSON 是错误的。

但是,

"timeStamp"
"timestamp"

不一样

0
投票

我的 data.json 有问题。当 .json 文件中没有 [] 时,该库可以工作。我删除了方括号,一切似乎都工作正常。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.