当前位置: 首页 > 知识库问答 >
问题:

如何从数据库创建JSON树

史默
2023-03-14

“我正在设置一个文件浏览器,并将文件夹的名称保存在数据库中。任何数量的文件夹都可以保存在数据库中,从保存的数据中,我想创建一个json树。

这是我的数据库表结构

folder_id    folder_name      parent_id
  1          parentFolder1    <NULL>
  2          parentFolder2    <NULL>
  3          subFolder1          1
  4          subFolder2          1
  5          subFolder3          3
  6          subFolder4          2
  7          subFolder5          5

parent\u id是一个外键,用于引用文件夹id。

这是我试图从上述数据库创建的json树结构,将来将添加更多父文件夹和子文件夹。是否可以从上面的表结构中创建json树?有人能帮我吗?

[
    {
        "id": "1",
        "value": "parentFolder1",
        "data": [
            {
                "id": "3",
                "value": "subFolder1",
                "data": [
                    {
                        "id": "5",
                        "value": "subFolder3",
                        "data": [
                            {
                                "id": "7",
                                "value": "subFolder5",
                                "data": []  
                                ]
                            }
                        ]
                    }
            },
            {
                "id": "4",
                "value": "subFolder2",
                "data": []
            }
        ]
    },
    {
        "id": "2",
        "value": "parentFolder2",
        "data": [
            {
                "id": "6",
                "value": "subFolder4",
                "data": []
            }
        ]
    }
]

共有2个答案

蓝昊然
2023-03-14

这里是C代码示例,这不是一个完美的代码。您需要修改它以供使用

#if 0
folder_id    folder_name      parent_id
  1          parentFolder1    <NULL>
  2          parentFolder2    <NULL>
  3          subFolder1          1
  4          subFolder2          1
  5          subFolder3          3
  6          subFolder4          2
  7          subFolder5          5
#endif
#include<stdio.h>
#include<iostream>
#include<vector>
#include<tuple>
#include <bits/stdc++.h>
#include<boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
std::vector<std::tuple <int, std::string, int>> list;
namespace pt = boost::property_tree;
pt::ptree rootNode;
int main () {

    list.push_back(std::make_tuple(1, "parentFolder1", 0));
    list.push_back(std::make_tuple(2, "parentFolder2", 0));
    list.push_back(std::make_tuple(3, "subFolder1", 1));
    list.push_back(std::make_tuple(4, "subFolder2", 1));
    list.push_back(std::make_tuple(5, "subFolder3", 3));
    list.push_back(std::make_tuple(6, "subFolder4", 2));
    list.push_back(std::make_tuple(7, "subFolder5", 5));

    int x, y;
    int k = 0;
    pt::ptree mainRootNode;
    for (int i=0; i < list.size(); i++) {
        if (std::get<2>(list[i])) {
            continue;
        }
        k = 0;
        pt::ptree subMainRootNode;
        subMainRootNode.add("id", std::get<0>(list[i]));
        subMainRootNode.add("value", std::get<1>(list[i]));
        pt::ptree Node;
        y = x = std::get<0>(list[i]);
        int saved_place = 0;
        for (int j = 0; j < list.size(); j++) {
            if (x == std::get<2>(list[j])) {
                k++;
                std::string str;
                for(int m = 0;m < k; m++) {
                    str.append("data.");
                }
                pt::ptree child;
                std::string id = str + "id";
                std::string value = str + "value";
                subMainRootNode.add(id, std::get<0>(list[j]));
                subMainRootNode.add(value, std::get<1>(list[j]));
                x = std::get<0>(list[j]);
                if (!saved_place) {
                    saved_place = j;
                }
            }
            if (((j+1) == list.size()) && saved_place) {
                j = saved_place ;
                k = 0;
                saved_place = 0;
                x = y;
            }
        }
        mainRootNode.add_child("data", subMainRootNode);
        pt::write_json(std::cout, subMainRootNode);
    }
}
董奇思
2023-03-14
$arr = array(
  array('id'=>100, 'parentid'=>0, 'name'=>'a'),
  array('id'=>101, 'parentid'=>100, 'name'=>'a'),
  array('id'=>102, 'parentid'=>101, 'name'=>'a'),
  array('id'=>103, 'parentid'=>101, 'name'=>'a'),
);

$new = array();
foreach ($arr as $a){
    $new[$a['parentid']][] = $a;
}
$tree = createTree($new, array($arr[0]));
print_r($tree);

function createTree(&$list, $parent){
    $tree = array();
    foreach ($parent as $k=>$l){
        if(isset($list[$l['id']])){
            $l['data'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    } 
    return $tree;
}
 类似资料:
  • 问题内容: 好的,我一直在绞尽脑汁尝试从mysql构建JSON数组。数组必须采用以下格式。我正在使用fullcalendar,并希望使日历上的事件动态化。下面是构建数组的代码,但当前它无法从mysql获取信息 问题答案: 你想做这样的事情吗? 它以以下格式返回json字符串: 或类似这样的东西:

  • 问题内容: 我有一个具有以下布局的SQL Server 我已经从该博客中获取了以下代码,以便根据我希望使用的数据创建JSON对象,但是他的数据存储方式有所不同。如何创建从数据库中提取的同一对象? 我猜我需要使该文件为.cshtml文件而不是.js文件,并使用此文件: 但是,如何修改此代码以产生相同的JSON对象? 这是博客中的相关代码,我的尝试如下: 编辑: 我现在正在为GetEvents命令使用

  • 我使用Angular调用外部API。Json数据的格式如下: 既然json数据是嵌套的,我如何在typescript中创建一个类来读取它? 请指导如果PermissionProfile,PermissionProfile将是独立的嵌套类? 我该如何申报?

  • 问题内容: 是否可以从结构动态创建mysql数据库。 好像卡在了密码提示符下 问题答案: 试试吧

  • 本文向大家介绍JavaScript从JSON数据创建数组?,包括了JavaScript从JSON数据创建数组?的使用技巧和注意事项,需要的朋友参考一下 要根据JSON数据创建数组,请使用from JavaScript的概念。假设以下是我们的数据- 以下是根据上述数据创建数组的代码- 示例 要运行上述程序,您需要使用以下命令- 在这里,我的文件名为demo82.js。 输出结果 这将产生以下输出-

  • 问题:是否可以在迁移脚本中创建一个新的DB,然后连接到它?怎么做? 我的场景:我试图在我的Java项目(使用Jersey2.4+Tomcat7+PostgreSQL 9.3.1+EclipseLink的RESTful应用程序)中使用flyway来管理使用Git的不同开发人员之间的更改。我编写了我的init脚本并运行它: 而且效果很好。问题是我不能用我的脚本创建新的DB。当我在脚本中包含以下一行时: