Обработка массивов массивов целых чисел с помощью rapidjson

Глядя на документацию по rapidjson, этот код предлагается для запроса массива:

for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)
    printf("%d ", itr->GetInt());

Однако у меня есть массив массивов, например:

[ [0,2], [1,2], [4, 5], ... ]

Я хотел бы иметь два уровня для его обработки, что-то вроде этого:

for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)
    for (Value::ConstValueIterator itr2 = itr->GetArray().Begin(); itr2 != itr->GetArray().End(); ++itr2)
        printf("%d ", itr2->GetInt());

Однако кажется, что itr не имеет никакого GetArray() или эквивалентного метода, который возвращает объект, в котором получает второй (внутренний) итератор.

ПРИМЕЧАНИЕ. я нашел это Пост с вопросами и ответами, но, похоже, он основан на получении Value, представляющего внутренний массив. Однако я не знаю, как получить такое значение от итератора itr (например, itr->value не работает).


person fgalan    schedule 25.05.2016    source источник


Ответы (1)


Вы можете анализировать массивы массивов json следующим образом:

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

using namespace rapidjson;

int main(void)
{
    std::vector<std::vector<int>> vec;
    const char* json = "{ \"data\":[[0,1],[2,3]] }";

    Document d;

    d.Parse<0>(json);
    Value& data = d["data"];
    vec.resize(data.Size());

    for (SizeType i = 0; i<data.Size(); i++)
    {
        const rapidjson::Value &data_vec = data[i];
        for (SizeType j = 0; j < data_vec.Size(); j++)
            vec[i].push_back(data_vec[j].GetInt());
    }

    return 0;
}
person doqtor    schedule 25.05.2016