1

我使用 nlohmann json 库已经有一段时间了,但我最近发现自己遇到了一个问题。我有一个对象的索引向量:

vector<string> indexes = {"value1", "subval"}; // etc

我想做这样的事情:

json myObj = "{\"value1\":{}}"_json;
myObj["value1"]["subval"] = "test";

我怎样才能做到这一点?

我试过这个:

json myObj = "{\"value1\":{}}"_json;
json ref = myObj;

for (string i : indexes) {
  ref = ref[i];
}

myObj = ref;

但这不起作用,因为它没有访问嵌套元素,它只是将对象设置为嵌套值。

4

1 回答 1

1

json ref = myObj;

当你这样做时,你应该意识到 ref 不是引用或指针,无论你想要什么。这是一个副本

解决方案:尝试改用reference_wrapper

     vector<string> indexes = {"value1", "subval"};                                                                                                                                                         
     json myObj;                                                                                                                                                                                            
     auto ref = std::ref(myObj);                                                                                                                                                                            

     for (string i : indexes) {                                                                                                                                                                             
         ref = ref.get()[i];                                                                                                                                                                                
     }                                                                                                                                                                                                      
     ref.get() = "test";                                                                                                                                                                                                   
     std::cout << myObj << std::endl;

或者,您也可以使用指针来代替 reference_wrapper。你的愿望。Ajson& ref显然不起作用 - 您不能重新分配引用,因此改为使用 reference_wrapper。

于 2020-04-15T20:19:37.327 回答