Утверждения Rapidjson во время HasMember

Всем тем, кто знаком с rapidjson, у меня есть следующая проблема:
У меня есть определенная функция, которая принимает в качестве параметра дату, и если эта дата существует в файле json, метод выполняет некоторые операции, а если нет, то другие операции.< br> В целом это выглядит так: (не настоящий код, скорее псевдо)

Функция:

void updateData(string date) {
    //
    //code to turn date from string to const char* (tested)
    //
    if (v.HasMember(date)) { //v is a value
        Value d;
        d=v[date];
        //
        //code that involves getting data from d (d is object) using HasMember
        //
    } else {
        //generic code that has nothing to do with json
    }

Файл JSON:

{
    "main": {
        "v": {
           "2014-10-02" : {
                //some fields
           },
           "2014-10-03" : {
                //some fields
           }
         }
     }    
}

Итак, в первый раз, когда я вызываю updateData для даты "2014-10-02", он работает правильно (выполняет часть if).
Проблема заключается в том, что когда я вызываю updateData для другой даты (например, "2014-10-03", которая должен работать хорошо) он всегда выполняет неправильную часть (другую часть), и даже когда я возвращаюсь к первой дате, он все равно выполняет другую часть. (при выталкивании многих утверждений (в основном isString())).
Так действительно ли HasMember является проблемой здесь, в том смысле, что он, возможно, изменяет объект?
И существуют ли какие-либо альтернативные способы поиска члена, кроме этого?
Любой совет приветствуется...


person loukwn    schedule 02.10.2014    source источник


Ответы (1)


Трудно сказать без фактического кода, но я думаю, что проблема может заключаться в том, что вы рассматриваете «v» как значение, а не как объект. "v" - это не значение, это имя объекта. Итак, у вас есть вложенный объект. Чтобы сделать это, я думаю, вам придется использовать MemberIterators и перебирать дочерние объекты в объекте v.

У Rapidjson есть довольно хороший пример использования итераторов.

здесь также есть этот вопрос, в котором есть довольно хороший ответ о том, как использовать вложенные объекты

Получение вложенного объекта внутри строки JSON с использованием rapidjson

person Mike Howard    schedule 02.10.2014
comment
так что в основном единственный способ взаимодействовать с членами объекта - это итераторы? - person loukwn; 03.10.2014
comment
Для вложенных объектов это единственный способ, которым я заставил его работать, хотя в моем случае это также имеет смысл. - person Mike Howard; 03.10.2014