Добавление массива к значению Json в C ++ - PullRequest
0 голосов
/ 01 мая 2020

Я знаю, что если у меня есть целые числа 'a' и 'b', я могу добавить их к значению в Json:

Value root;
Value v = root["int"];
int a = 1;
int b = 2;
v.append(a);
v.append(b);

Результирующий Json файл:

"int": 
  [
    1,
    2
  ]

Но есть ли способ добавить целые массивы? Возможно, что-то вроде этого:

Value root;
Value v = root["arrays"];
int a[3] = {1,2,3};
int b[3] = {4,5,6};
v.append(a);
v.append(b);

Я пытаюсь, чтобы мой результирующий файл Json выглядел так:

"arrays": 
  [
    [1, 2, 3],
    [4, 5, 6]
  ]

Но вместо этого Json добавляет только значение адреса указателя , который читается как «правда»:

"arrays": 
  [
    true,
    true
  ]

1 Ответ

1 голос
/ 01 мая 2020

Явным способом является использование range-for с временным значением Value.

Value root;
Value v = root["arrays"];
int a[3] = {1,2,3};
int b[3] = {4,5,6};

Value tmp;
for(auto i : a) { tmp.append(i); }
v.append(tmp);

tmp = Value{}; // reset
for(auto i : b) { tmp.append(i); }
v.append(tmp)

Возможная вспомогательная функция шаблона, чтобы красиво обернуть ее:

template<typename RANGE>
Value rangeToValue(RANGE src) {
    Value result;
    for (const auto &value : src) {
        result.append(value);
    }
    return result;
}

Тогда это должно работать:

v.append(rangeToValue(a)); v.append(rangeToValue(b));

...