- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在实现递归函数时遇到问题,该函数遍历我从解析 json 输入中获得的树。
json 输入。例如:
{
"attr" : { "a": 1, "ovec": [ { "b": 2, "c": 3 }, { "d": 4} ] }
}
这就是我们所说的“属性的复合值”,该值只是一个 JSON 文档。它的内容是完全任意的(只要它的 JSON 有效)。
问题是,对于 Vector,我必须使用 Value::ConstValueIterator 类型进行循环(与 Object 不同,我在其中使用 Value::ConstMemberIterator)。
我的递归函数将 Value::ConstMemberIterator 作为参数,一切正常,直到我在 Vector 中遇到 Vector/Object - 对于递归调用,我需要一个 Value::ConstMemberIterator 类型的迭代器。
“遍历”函数的相关部分:
int parseContextAttributeCompoundValue
(
const Value::ConstMemberIterator& node
)
{
std::string type = jsonParseTypeNames[node->value.GetType()];
if (type == "Array")
{
for (Value::ConstValueIterator iter = node->value.Begin(); iter != node->value.End(); ++iter)
{
std::string nodeType = jsonParseTypeNames[iter->value.GetType()];
if (nodeType == "String")
{
val = iter->GetString();
}
// else if ...
if ((nodeType == "Object") || (nodeType == "Array"))
{
// Here's my problem - need to convert 'iter' to Value::ConstMemberIterator
// in order to recursively call parseContextAttributeCompoundValue for this object/array
parseContextAttributeCompoundValue(iter); // COMPILATION ERROR
}
}
}
else if (type == "Object")
{
for (Value::ConstMemberIterator iter = node->value.MemberBegin(); iter != node->value.MemberEnd(); ++iter)
{
std::string nodeType = jsonParseTypeNames[iter->value.GetType()];
if (nodeType == "String")
{
val = iter->value.GetString();
}
else if (nodeType == "Number")
{
if ((nodeType == "Object") || (nodeType == "Array"))
{
// Here I'm just fine as iter is of the desired type already
parseContextAttributeCompoundValue(iter);
}
}
}
}
我尝试了一些方法,比如调用 iter->value.MemberBegin() 以“转换”为所需的类型,但到目前为止没有任何成功
非常感谢这里的一些帮助......
最佳答案
您可以简单地调用具有Value
类型的函数,而不是传递迭代器:
void parseContextAttributeCompoundValue(const Value& v) {
if (v.IsObject()) {
// ...
}
else if (v.IsArray() {
// ...
}
}
然后从调用站点:
for (Value::ConstValueIterator iter = ...) {
parseContextAttributeCompoundValue(*iter);
}
for (Value::ConstMemberIterator iter = ...) {
parseContextAttributeCompoundValue(iter->value);
}
关于c++ - 在rapidjson中解析数组内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31383852/
我需要一个构造 rapidjson::Document 并返回的函数。但是当我用这个原型(prototype)写一个函数时: rapidjson::Document progressToJson(co
我想从 JSON 字符串创建一个 rapidjson::Value,例如 [1,2,3]。注意:这不是一个完整的 JSON 对象,它只是一个 JSON 数组。在 Java 中,我可以使用 object
根据 the tutorial : Each JSON value is stored in a type called Value. A Document, representing the DOM
如何将 rapidjson 数组迭代器转换为 rapidjson::value? 我不想要关注如何获取快速 json 数组的内容或如何遍历它的答案。 我也很清楚我可以使用 rapidjson 文档中的
似乎文档也可以用作参数 void test(Value value); 而Document和Value都可以具有子值,它们之间有什么区别? 最佳答案 首先,test函数不应该编译,因为Value不支持
当我使用 rapidjson::Value 方法询问 GetType() 的类型时,它只返回以下类型: //! Type of JSON value enum Type { kNullType
我希望能够使用 RapidJSON 创建以下 JSON 输出 { "year": 2013, "league": "national", "teams": [
我想使用 Rapidjson 将嵌套结构序列化为 JSON,并且还希望能够单独序列化每个对象,因此任何实现 ToJson 的类都可以序列化为 JSON 字符串。 在以下代码中,Car 有一个 Whee
我尝试将 rapidjson::Document 对象作为函数参数传递: std::string json_to_string(rapidjson::Document jmsg) { // Con
我正在使用 RapidJSON 为我的游戏解析一些配置文件( Material 定义、组件等)。但是,我很好奇是否可以将 RapidJSON 配置为仅解析 JSON 文档中的第一层。想象一下: {
我有两个由 Rapidjson 库解析的 json 字符串。 JSON 1: { "jKey1":{ "jVal1Key1":{
我正在尝试使用 RapidJSON 解析一个 JSON 文件,其中有数千个像这样的对象 "Amateur Auteur": { "layout": "normal", "name": "Amateur
我有一个包含嵌套对象和对象数组的 Json 记录,这些字段中的键包含空格,我想将所有空格更改为 _,所以我必须迭代 json 对象中的所有键. 我的想法是编写深度优先搜索以使用 ConstMember
我搜索了这个特定错误,但没有找到任何相关问题。 我正在尝试使用 Rapidjson 来解析我的 C++ 项目中的 .json 文件,这就是我的做法(遵循 RapidJSON tutorial 的说明)
想知道是否可以直接从中提取 rapidjson::Value 的名称。 例如,假设我们有以下 JSON 数据: { "name": [ { /*some data*/
我正在尝试使用 RapidJson 在 C++ 中解析 json 数据。我不知道我哪里做错了,但我的断言失败了。当我尝试调试它的显示 sigabrt 时它运行断言行。社区 我感谢您的见解。感谢您回答这
我有以下代码将数据添加到 rapidjson::Document,声明如下: rapidjson::Document rest; rest.SetObject(); 在循环中。 Value v(val
我有一个像这样的 JSON 字符串: {"callCommand":{"command":"car","floor":"2","landing":"front"}} 现在,我想检查是否有名为 comm
我使用 C++ 生成了以下 JSON: { "ProfileID": "DUO1", "ProfileName": "Sample" } 用于生成的代码是: string jsonDa
我正在尝试使用 rapidjson 创建一个 json 文档,但我不知道如何复制以下文档的一部分,特别是以“allocations”开头的嵌套对象,用于我所做的其他元素 Value valObject
我是一名优秀的程序员,十分优秀!