0

我的 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
]

感谢任何帮助,谢谢!

4

1 回答 1

0

如果您使用的是 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 数组,而不是对象。

于 2019-02-21T04:13:42.637 回答