Проблема с C ++ Json Key - PullRequest
       26

Проблема с C ++ Json Key

0 голосов
/ 21 февраля 2019

У меня проблема с моим кодом для преобразования объектов jSon.Я пытаюсь написать цикл, который принимает вектор, и если вектор имеет инверсию, сохраните ее в объекте jSon.Единственная реальная проблема, с которой я столкнулся - это правильный вывод.Я получаю сообщение об ошибке при попытке использовать переменную в качестве значения ключа при ожидании строки.Мой главный вопрос - как мне преобразовать мое целое число в строку, чтобы код принимал ее и печатал правильно?

for(auto j = 0; j <= myvec.size(); j++){
    m = j+1;
    if(m > myvec.size()){
        break;
    }
    if(name == metad){
        break;
    }
    if(myvec[m] != 0){
        if(myvec[j] > myvec[m]){
            jcount = j;
            jsonresult.emplace_back(nlohmann::json::object_t::value_type(j,{ myvec[j], myvec[m]}));
            count++;
        }

Основная проблема в строке emplace_back, где он не позволил бы мне использовать j в качествеправильное значение ключа, приводящее к ошибке

error: no matching function for call to ‘std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> >::pair(int&, <brace-enclosed initializer list>)’
     jsonresult.emplace_back(nlohmann::json::object_t::value_type(j,{myvec[j], myvec[m]}));

Итак, я предполагаю, что мой вопрос заключается в том, как заставить его правильно хранить динамическую переменную, чтобы мой код выводил это

1":[811700988,797039],"2":[797039,-1680733532]

вместо

[
  2,
  797039,
  -1680733532
]

Спасибо за любую помощь, спасибо!

1 Ответ

0 голосов
/ 21 февраля 2019

Если вы используете C ++ 11, вы можете использовать to_string(), чтобы преобразовать индекс в строку для использования в качестве ключа объекта.И вы можете назначить вектор свойству в объекте JSON.

if (myvec[m] != 0 && myvec[j] > myvec[m]) {
    vector<int> pair{myvec[j], myvec[m]};
    jsonresult[to_string(j)] = pair;
}

emplace_back() предназначен для добавления к массиву JSON, а не к объекту.

...