问题描述
我有一个特殊情况,如果可能的话,我试图以最小的更改来解决。 其中一个数据是
js["key1"]["subkey2"]["subsubkey3"].push_back({1,2,3,{4,5}});
[ 1,[[4,5]] ]
稍后我想插入
{1,6}}
那么它应该变成
[ 1,5],[4,6]] ]
如何在不将 1,3
值作为键的情况下实现这一点?
解决方法
我玩了一些。我没有得到你想要的结果。到目前为止,这是我的代码和结果。
#include <iostream>
#include <json.hpp>
using namespace std;
using JSON = nlohmann::json;
int main() {
JSON json = JSON::object();
JSON key1JSON = JSON::object();
JSON key2JSON = JSON::object();
JSON key3JSON = JSON::array();
key3JSON.push_back( {1,2,3,{4,5} } );
key3JSON.push_back( {6} );
key2JSON["subsubkey3"] = key3JSON;
key1JSON["subkey2"] = key2JSON;
json["key1"] = key1JSON;
cout << json.dump(2) << endl;
}
输出:
{
"key1": {
"subkey2": {
"subsubkey3": [
[
1,[
4,5
]
],[
6
]
]
}
}
}
您会看到第一个 push_back 将一个数组推送到数组中,这可能比您想要的更深一层,而第二个添加了第二个数组,这也不是您想要的。
这意味着您可能必须编写自己的方法,尤其是当您还想处理唯一性时。我个人从来没有像您在示例中那样使用自由格式的数据。但也许你的方法看起来像:
bool contains(const JSON &json,const JSON &value) {
... this looks like fun to write.
}
void appendUnique(JSON &json,const JSON &array) {
for (JSON & thisJson: array) {
if (!contains(json,thisJson)) {
json.push_back(thisJson);
}
}
}
我像这样修改了我的代码:
void appendUnique(JSON &json,const JSON & array) {
for (const JSON & thisJSON: array) {
json.push_back(thisJSON);
}
}
...
appendUnique(key3JSON,{1,5} } );
appendUnique(key3JSON,{6} );
得到这个:
{
"key1": {
"subkey2": {
"subsubkey3": [
1,[
4,5
],6
]
}
}
}
我不会编写 isUnique 方法。但我认为你可能不得不就此得出结论。