C ++ Json Key变量问题

时间:2019-02-20 22:35:03

标签: c++ json nlohmann-json

我的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 :(得分: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数组,而不是对象。