【问题标题】:C++ Json Key variable issueC ++ Json Key变量问题
【发布时间】:2019-02-20 22:35:02
【问题描述】:

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

感谢任何帮助,谢谢!

【问题讨论】:

  • 您想要的不是有效的 JSON。你的意思是{"1":[811700988,797039],"2":[797039,-1680733532]}
  • jsonresult 应该是 JSON 对象,而不是 JSON 数组。
  • @Barmar 是的,这就是我正在寻找的结果。

标签: c++ json nlohmann-json


【解决方案1】:

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

【讨论】:

  • 是的 to_string() 最终成为了解决方案,所以如果其他人遇到问题,这就是答案!感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多