MALOUDA-PSA 2024-02-26 13:25 采纳率: 91%
浏览 4

关于树形数据结构的问题

我想做个类似印象笔记一类的app, 设计如下 json 数据结构:

 "data": [
     {   
      "ProjName": "t10文件夹1-1-1-1-2",
      "FileName": "emp10.cdr",
      "ProjNumber": 10, 
      "JpgFile": "emp10.jpg",
      "Comments": "cdr for employee",
      "ProjType": "graphic design",
      "ProjState": 1,
      "version": 1,
      "CreateTime": "20230728",
      "UpdateTime": "20230608",
      "pid": .
    },  
    {   
      "ProjName": "文件夹1-1-1-1-1",
      "FileName": "emp.cdr",
      "ProjNumber": 11, 
      "JpgFile": "emp.jpg",
      "Comments": "catia cdr for employee",
      "ProjType": "graphic design",
      "ProjState": 1,
      "version": 1,
      "CreateTime": "20230728",
      "UpdateTime": "20230608",
      "pid": 0,
      "childrens":[
    {   
      "ProjName": "k文件夹1-1-1-1-2",
      "FileName": "emp.cdr",
      "ProjNumber": 12, 
      "JpgFile": "emp.jpg",
      "Comments": "cdr for employee",
      "ProjType": "graphic design",
      "ProjState": 1,
      "version": 1,
      "CreateTime": "20230728",
      "UpdateTime": "20230608",
      "pid": 11
    },  
    {   
      "ProjName": "文件夹1-1-1-1-2",
      "FileName": "emp.cdr",
      "ProjNumber": 13, 
      "JpgFile": "emp.jpg",
      "Comments": "cdr for employee",
      "ProjType": "graphic design",
      "ProjState": 1,
      "version": 1,
      "CreateTime": "20230728",
      "UpdateTime": "20230608",
      "pid": 11
    }   
]
    }



使用nlohamann解析的时候,总是感觉没有叶节点,觉得这种数据结构有问题,是不是应该设计成二叉树或者是多叉树比较合适? 我是it行业门外汉,自学的,所以请求大家一起来讨论

  • 写回答

5条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-02-26 13:26
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如需一对一服务私聊我哦
    这个数据结构看起来是一棵一般意义上的树(非二叉树),每个节点可以有一个父节点和多个子节点,应该可以用nlohmann或其他Json解析库正常解析。如果你觉得节点信息中没有包含父子关系,可以考虑在Json中增加一个字段来表示父节点ID或者将父子关系在程序中处理成树状结构。 以下是一个用c++及nlohmann库解析该Json的例子:
    #include <iostream>
    #include <fstream>
    #include <nlohmann/json.hpp>
    using json = nlohmann::json;
    void print_tree(json node, int depth) {
        // 打印节点信息
        std::cout << std::string(depth, '-') << node["ProjName"] << std::endl;
        // 遍历子节点
        if (node.contains("childrens")) {
            for (auto child : node["childrens"]) {
                print_tree(child, depth+1);
            }
        }
    }
    int main() {
        std::ifstream ifs("data.json");
        json data;
        ifs >> data;
        // 从根节点开始打印树
        print_tree(data[0], 0);
        return 0;
    }
    

    输出:

    -t10文件夹1-1-1-1-2
    --k文件夹1-1-1-1-2
    --文件夹1-1-1-1-2
    -文件夹1-1-1-1-1
    --emp.cdr
    --emp.jpg
    --catia cdr for employee
    --graphic design
    --1
    --1
    --20230728
    --20230608
    --0
    -emp10.cdr
    -emp10.jpg
    -cdr for employee
    -graphic design
    -1
    -1
    -20230728
    -20230608
    -.
    评论

报告相同问题?

问题事件

  • 创建了问题 2月26日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效