如何构造树状 JSON 数据 JSON-Tree
十年河东,十年河西,莫欺骚年穷...打错一个字哈、~_~
接着上一篇博客,上一篇博客是=使用数据库结合LINQ构造的,为了方便理解,本篇采用泛型分组进行构造。
有兴趣的小虎斑可以参考上一篇博客:如何构造分层次的 Json 数据
本篇很简单,直接上代码
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks; namespace DFS
{
class Program
{
static void Main(string[] args)
{
List<HelloChinaModel> MList = new List<HelloChinaModel>()
{
new HelloChinaModel(){ Id=,Province="河南省",City="商丘市",District="永城市",OrgName="薛湖镇",AddTime=DateTime.Now},
new HelloChinaModel(){ Id=,Province="河南省",City="商丘市",District="夏邑县",OrgName="火店乡",AddTime=DateTime.Now},
new HelloChinaModel(){ Id=,Province="河南省",City="商丘市",District="睢阳区",OrgName="龙华小区",AddTime=DateTime.Now},
new HelloChinaModel(){ Id=,Province="河南省",City="平顶山市",District="新华区",OrgName="河南城建学院",AddTime=DateTime.Now},
new HelloChinaModel(){ Id=,Province="河南省",City="平顶山市",District="鲁山县",OrgName="炉山镇",AddTime=DateTime.Now},
new HelloChinaModel(){ Id=,Province="河南省",City="洛阳市",District="阳逻县",OrgName="大杨镇",AddTime=DateTime.Now}, new HelloChinaModel(){ Id=,Province="江苏省",City="苏州市",District="张家港市",OrgName="乐余镇",AddTime=DateTime.Now},
new HelloChinaModel(){ Id=,Province="江苏省",City="苏州市",District="昆山市",OrgName="小上海镇",AddTime=DateTime.Now},
new HelloChinaModel(){ Id=,Province="江苏省",City="南京市",District="雨花台区",OrgName="雨花台小区",AddTime=DateTime.Now},
new HelloChinaModel(){ Id=,Province="江苏省",City="徐州市",District="沛县",OrgName="王文学镇",AddTime=DateTime.Now}, new HelloChinaModel(){ Id=,Province="山东省",City="日照市",District="花果山县",OrgName="猴子镇",AddTime=DateTime.Now},
new HelloChinaModel(){ Id=,Province="山东省",City="青岛市",District="青岛啤酒县",OrgName="扎啤镇",AddTime=DateTime.Now},
};
// 首先根据省份分组
var P_ls = MList.GroupBy(a => a.Province ).Select(g => (new { Province = g.Key, Citys = g })).ToList();//省份列表
//
List<Model_P> PList = new List<Model_P>();
foreach (var item in P_ls)
{
Model_P P = new Model_P();
// //
List<Model_C> CList = new List<Model_C>();
//获取各个分组
var Province = item.Province;//省份的名称
var CitysList = item.Citys;//省份对应的市 列表
var C_ls = CitysList.GroupBy(a => a.City ).Select(g => new { City = g.Key, Districts = g }) ;//市/区列表
foreach (var Citem in C_ls)
{
List<Model_D> DList = new List<Model_D>();
Model_C C = new Model_C();
//
var DistrictsLsit = Citem.Districts;//
var D_ls = DistrictsLsit.GroupBy(a => a.District ).Select(g => new { Districts = g.Key, OrgNames = g });//县/区列表
foreach (var Ditem in D_ls)
{
List<Model_O> OList = new List<Model_O>();
Model_D D = new Model_D(); var OrgNamesList = Ditem.OrgNames.ToList();
var O_ls = OrgNamesList.GroupBy(a =>a.OrgName ).Select(g => new { OrgName = g.Key });//乡镇列表/没有下级了 foreach (var Oitem in O_ls)
{ Model_O O = new Model_O();
string orgName = Oitem.OrgName.ToString();
O.OrgName = orgName;
OList.Add(O);
D.nodes = OList;
}
string Dname = Ditem.Districts.ToString();
D.District = Dname; DList.Add(D); C.nodes = DList;
}
string Cname = Citem.City.ToString(); C.City=Cname;
CList.Add(C);
P.nodes = CList;
}
P.Province = item.Province.ToString(); PList.Add(P);
}
string Json = JsonConvert.SerializeObject(PList);
Console.WriteLine(Json); Console.ReadKey();
}
} public partial class HelloChinaModel
{
public int Id { get; set; }
public string Province { get; set; }
public string City { get; set; }
public string District { get; set; }
public string OrgName { get; set; }
public Nullable<System.DateTime> AddTime { get; set; }
} /// <summary>
/// 省
/// </summary>
public class Model_P
{
public string Province { get; set; }
public List<Model_C> nodes { get; set; }
}
/// <summary>
/// 市/区
/// </summary>
public class Model_C
{
public string City { get; set; }
public List<Model_D> nodes { get; set; }
}
/// <summary>
/// 县(县级市)/区
/// </summary>
public class Model_D
{ public string District { get; set; }
public List<Model_O> nodes { get; set; }
}
/// <summary>
/// 镇/乡/其他
/// </summary>
public class Model_O
{
public string OrgName { get; set; }
} }
构造的数据如下:
[
{
"Province": "河南省",
"nodes": [
{
"City": "商丘市",
"nodes": [
{
"District": "永城市",
"nodes": [
{
"OrgName": "薛湖镇"
}
]
},
{
"District": "夏邑县",
"nodes": [
{
"OrgName": "火店乡"
}
]
},
{
"District": "睢阳区",
"nodes": [
{
"OrgName": "龙华小区"
}
]
}
]
},
{
"City": "平顶山市",
"nodes": [
{
"District": "新华区",
"nodes": [
{
"OrgName": "河南城建学院"
}
]
},
{
"District": "鲁山县",
"nodes": [
{
"OrgName": "炉山镇"
}
]
}
]
},
{
"City": "洛阳市",
"nodes": [
{
"District": "阳逻县",
"nodes": [
{
"OrgName": "大杨镇"
}
]
}
]
}
]
},
{
"Province": "江苏省",
"nodes": [
{
"City": "苏州市",
"nodes": [
{
"District": "张家港市",
"nodes": [
{
"OrgName": "乐余镇"
}
]
},
{
"District": "昆山市",
"nodes": [
{
"OrgName": "小上海镇"
}
]
}
]
},
{
"City": "南京市",
"nodes": [
{
"District": "雨花台区",
"nodes": [
{
"OrgName": "雨花台小区"
}
]
}
]
},
{
"City": "徐州市",
"nodes": [
{
"District": "沛县",
"nodes": [
{
"OrgName": "王文学镇"
}
]
}
]
}
]
},
{
"Province": "山东省",
"nodes": [
{
"City": "日照市",
"nodes": [
{
"District": "花果山县",
"nodes": [
{
"OrgName": "猴子镇"
}
]
}
]
},
{
"City": "青岛市",
"nodes": [
{
"District": "青岛啤酒县",
"nodes": [
{
"OrgName": "扎啤镇"
}
]
}
]
}
]
}
]
@陈卧龙的博客
如何构造树状 JSON 数据 JSON-Tree的更多相关文章
- C# 递归构造树状数据结构(泛型),如何构造?如何查询?
十年河东,十年河西,莫欺少年穷. 学无止境,精益求精 难得有清闲的一上午,索性写篇博客. 首先,我们需要准备一张表,如下范例: create table TreeTable ( TreeId ) no ...
- 菜鸟笔记:node.js+mysql中将JSON数据构建为树(递归制作树状菜单数据接口)
初学Web端开发,今天是第一次将所学做随笔记录,肯定存在多处欠妥,望大家海涵:若有不足,望大家批评指正. 进实验室后分配到的第一个项目,需要制作一个不确定层级树形菜单的数据接口,对于从来没实战编过程的 ...
- Apple Tree POJ - 3321 dfs序列构造树状数组(好题)
There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. ...
- 基于ExtJs6前台,SpringMVC-Spring-Mybatis,resteasy,mysql无限极表设计,实现树状展示数据(treepanel)
先从后台讲起 1.表的设计 parent_id就是另外一条记录的id,无限极表设计可以参考 http://m.blog.csdn.net/Rookie_Or_Veteran/article/deta ...
- 树状数组,Fenwick Tree
Fenwick Tree, (also known as Binary Indexed Tree,二叉索引树), is a high-performance data structure to cal ...
- PHP递归实现层级树状展现数据
树状数据展现很常用,今天学习了PHP的递归,也来总结总结! PHP代码: function _getTreeList_custom1($data,$parent_id,$depth) { $retur ...
- 如何构建JSON数据,JSON数据的格式,JSON数据的获取
假设你是用$.getJSON();方法获取JSON数据$.getJSON(url,{"Action":"getStudent"},function(data){ ...
- vue 树状图数据的循环 递归循环
在main.js中注册一个子组件 在父组件中引用 树状图的数据格式 绑定一个数据传入子组件,子组件props接收数据 子组件中循环调用组件,就实现了递归循环
- 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)
题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...
随机推荐
- JavaScript 字符串转json格式
第一种:浏览器支持的转换方式(Firefox,chrome,opera,safari,ie)等浏览器: JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON. ...
- 监听软件异常崩溃并且保持日志--CrashHandler编写自己的异常捕获类
平时写代码,我们可能会抛出各种异常,这些异常有些是我们测试过程中发现进行解决的,但是也有一些异常是我们未知的,不论是代码的逻辑问题还是Android本身底层的一些bug,我们都需要及时了解并进行解决. ...
- centos7 Linux 安装jdk1.8
在CentOS7上安装JDK1.8 1 通过 xshell 连接到CentOS7 服务器: 2 进入到目录 /usr/local/ 中(一般装应用环境我们都会在这个目录下装,也可自行选择目录): cd ...
- beta冲刺随笔集
团队成员 郑西坤 031602542 (队长) 陈俊杰 031602504 陈顺兴 031602505 张胜男 031602540 廖钰萍 031602323 雷光游 031602319 吴志鸿 03 ...
- 3.网络编程-tcp的服务器简单实现
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/1/13 22:03 # @Author : ChenAdong # @ema ...
- C# 异步编程3 TPL Task 异步程序开发
.Net在Framework4.0中增加了任务并行库,对开发人员来说利用多核多线程CPU环境变得更加简单,TPL正符合我们本系列的技术需求.因TPL涉及内容较多,且本系列文章为异步程序开发,所以本文并 ...
- CSS| 框模型-padding
例子:
- layer层、modal模拟窗 单独测试页面
layer_test.jsp <%@ page language="java" import="java.util.*" pageEncoding=&qu ...
- java调用python的惨痛史(无法获取环境变量)
环境:java,was,python2.6,红帽linux,oracle,python用cx_Oracle 事情是这样的,有个需求,需要对数据库进行处理,简单说就是把数据取出来,用pyt ...
- 【PAT】B1069 微博转发抽奖(20 分)
一开始并没有做出来,关键是没有认真理解题,每次做题之前都应该认真读题,自己把样例模拟一下,防止漏掉信息,减慢自己写代码的速度 此题的重点在于规划逻辑,以及如何储存中奖者,用map最好,否则查找并不方便 ...