十年河东,十年河西,莫欺骚年穷...打错一个字哈、~_~

接着上一篇博客,上一篇博客是=使用数据库结合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的更多相关文章

  1. C# 递归构造树状数据结构(泛型),如何构造?如何查询?

    十年河东,十年河西,莫欺少年穷. 学无止境,精益求精 难得有清闲的一上午,索性写篇博客. 首先,我们需要准备一张表,如下范例: create table TreeTable ( TreeId ) no ...

  2. 菜鸟笔记:node.js+mysql中将JSON数据构建为树(递归制作树状菜单数据接口)

    初学Web端开发,今天是第一次将所学做随笔记录,肯定存在多处欠妥,望大家海涵:若有不足,望大家批评指正. 进实验室后分配到的第一个项目,需要制作一个不确定层级树形菜单的数据接口,对于从来没实战编过程的 ...

  3. 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. ...

  4. 基于ExtJs6前台,SpringMVC-Spring-Mybatis,resteasy,mysql无限极表设计,实现树状展示数据(treepanel)

    先从后台讲起 1.表的设计 parent_id就是另外一条记录的id,无限极表设计可以参考  http://m.blog.csdn.net/Rookie_Or_Veteran/article/deta ...

  5. 树状数组,Fenwick Tree

    Fenwick Tree, (also known as Binary Indexed Tree,二叉索引树), is a high-performance data structure to cal ...

  6. PHP递归实现层级树状展现数据

    树状数据展现很常用,今天学习了PHP的递归,也来总结总结! PHP代码: function _getTreeList_custom1($data,$parent_id,$depth) { $retur ...

  7. 如何构建JSON数据,JSON数据的格式,JSON数据的获取

    假设你是用$.getJSON();方法获取JSON数据$.getJSON(url,{"Action":"getStudent"},function(data){ ...

  8. vue 树状图数据的循环 递归循环

    在main.js中注册一个子组件 在父组件中引用 树状图的数据格式 绑定一个数据传入子组件,子组件props接收数据 子组件中循环调用组件,就实现了递归循环

  9. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

随机推荐

  1. 《ASP.NET MVC企业实战》(三)MVC开发前奏

    ​ 在上一篇“<ASP.NET MVC企业级实战>(二)MVC开发前奏”中跟随作者大概了解了一些C#3.0和3.5中的新特性.本篇继续以这样的方式来学习C#中的一些特性.   一.C#3. ...

  2. Java集合之TreeMap源码分析

    一.概述 TreeMap是基于红黑树实现的.由于TreeMap实现了java.util.sortMap接口,集合中的映射关系是具有一定顺序的,该映射根据其键的自然顺序进行排序或者根据创建映射时提供的C ...

  3. id、name、setter方法注入、构造方法注入、工厂方法注入、注解注入、方法注入、方法替换、Web作用域、普通bean引用Web作用域的bean

    spring IoC的id和name id的命名需要满足XML对id的命名规范,必须以字母开始,后面可以是字母.数字.连字符.下画线.句号.冒号等等号,但逗号和空格是非法的.如果用户确实希望用一些特殊 ...

  4. [Android] 获取系统顶部状态栏(Status Bar)与底部导航栏(Navigation Bar)的高度

    Android一些设备都有上下两条bar,我们可以获取这些bar的信息.下面放上获取高度的代码.代码注释和其他方法有空再放. 原文地址请保留http://www.cnblogs.com/rossone ...

  5. SolrCloud集群搭建(基于zookeeper)

    1. 环境准备 1.1 三台Linux机器,x64系统 1.2 jdk1.8 1.3 Solr5.5 2. 安装zookeeper集群 2.1 分别在三台机器上创建目录 mkdir /usr/hdp/ ...

  6. Tensorflow实现稀疏自动编码(SAE)

    1.概述 人在获取图像时,并不是像计算机逐个像素去读,一般是扫一眼物体,大致能得到需要的信息,如形状,颜色,特征.怎么让机器也有这项能力呢,稀疏编码来了. 定义: 稀疏自编码器(Sparse Auto ...

  7. 【 PostgreSQL】查询某模式下所有表的分布键信息

    想看下某模式下所有表创建的分布键是否合理,查找系统表文档拼出如下sql,亲们如果有更好的sql或者意见欢迎留言! ​SELECT     aaa.nspname AS "模式名", ...

  8. NFS常见问题

    问题一:取消挂载失败 问题现象: umount /opt/data umount.nfs: /opt/data: device is busy umount.nfs: /opt/data: devic ...

  9. .NET Core launch.json 简介

    1.环境 Windows,.NET Core 2.0,VS Code dotnet> dotnet new console -o myApp 2.launch.json配置文件 { // Use ...

  10. Python基础知识:类

    初级篇 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 1.面向对象三大特性 ...