0

我需要创建以下结构,但我正在努力使用 json 来做到这一点。

{
    "ParentTree": [{
        "Name": "Name3",
        "children": [{
            "Name": "Name2",
            "children": [{
                "Name": "Name1",
                "children": [{
                    "Name": "Name0"
                }]
            }]
        }]
    }]
}

我在下面尝试过,但无法获得如何动态添加名称和子键。

json jsonObj;
jsonObj["ParentTree"] = json::array();
for (auto index = 3; index >= 0; index--) {
    jsonObj["ParentTree"].push_back(json::object());
}

以前它是使用以下方式完成的,而不使用 nlohmann json:

std::string PResult = "\"ParentTree\":[{";
for (int j = 3; j >= 0; j--)
{
    std::string num = std::to_string(j);
    PResult += "\"Name\":\"";
    PResult += "Name";
    PResult +=  num + "\",";
    if (j == 0) break;
    PResult += "\"children\":[{";
}

PResult.erase(PResult.length() - 1);

for (int j = 3; j >= 0; j--)
{
    PResult += "}]";
}
4

1 回答 1

0

以下代码构造您所需的 json 对象。

大括号乍一看可能会令人困惑,但是一旦您阅读了文档并了解了json::array()json::object()的工作原理,您应该能够理解。(阅读上面超链接中的示例代码。)

#include "json.h"
#include <iostream>
using namespace nlohmann;

int main() {
  json jsonObj;
  jsonObj["ParentTree"] = json::array();

  // Bottom-up approach: construct inside object first.
  json child0 = json::array({json::object({{"Name", "Name0"}})});
  json child1 = json::array( {json::object({{"Name", "Name1"}, {"children", child0}})} );
  json child2 = json::array( {json::object({{"Name", "Name2"}, {"children", child1}})} );
  jsonObj["ParentTree"] = json::array( {json::object({{"Name", "Name3"}, {"children", child2}})} );

  std::cout << jsonObj.dump(2);
}
于 2018-09-02T16:49:32.090 回答