如何构造树状 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]表示不 ...
随机推荐
- 《Inside C#》笔记(十四) 反射
通过反射可以在运行时动态地获取一个应用的元数据. 一 反射相关的类和方法 与反射相关的类处在System.Reflection命名空间下,包括Assembly.Module.MethodInfo.Fi ...
- .NET中资源文件的使用
工作需要,为VB.NET WinForm程序提供一个中英文界面切换功能,大方向有三个ini.XML.资源文件. 首先ini太过时,坚决不打算用.资源文件和XML相比提供了一个资源文件管理器,编写键值对 ...
- 盐城 - 开设IT公司的好地方
盐城:位于江苏省北部,这一好像只能算三线的城市,不久前当选为“国家中心城市”.在全国仅有的50城市中名列34.它可成为发展IT产业的好地方. (1)人才济济.从这里走出去的高级人才数不胜数,留在这里的 ...
- python装饰器(新年第一写)
祭奠碌碌无为的2018,想想其实也不算碌碌无为,至少我还搞懂了装饰器,写了一堆有用没用的玩意 原来觉得装饰器挺难的,直到2018年的最后几天,突然就明白了,难道这就是传说中的开天聪么 言归正传,之所以 ...
- Django知识补充
目录 一.文件上传 二.Models补充 三.Django总结 一.文件上传 1.通过form表单或者通过From类上传 views.py from django.shortcuts import r ...
- Kali下Ettercap 使用教程+DNS欺骗攻击
一.Ettercap 使用教程 EtterCap是一个基于ARP地址欺骗方式的网络嗅探工具.它具有动态连接嗅探.动态内容过滤和许多其他有趣的技巧.它支持对许多协议的主动和被动分析,并包含许多用于网络和 ...
- java注释讲解
注释简单的来说就是一种说明,不能被当成执行语句执行.做为一名程序员,但我们在写代码时是顺着思路写下去的.写代码好比就是在做题.当你在做的时候你脑海时的思路很清晰,会想到用一些特殊的方法来解决当前的问题 ...
- 2018年值得关注的10大JavaScript动画库
2018年值得关注的10大JavaScript动画库 旭日云中竹 前端早读课 1周前 前言 平时大家开发动画是采用什么方式呢?虽然18年过半,可这十个动画库是真的没听过几个,有点尴尬.今日早读文章由@ ...
- eclipse打断点调试进入到class文件中,不显示变量值的解决办法汇总
每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code 问题描述:eclipse打断点调试进入到class文件中,而且监视区不显示变量结果 是由于对应 ...
- 将Integer赋值给int(空指针异常)
将Integer赋值为null,然后在赋值给int类型,会出现空指针异常