如何构造树状 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]表示不 ...
随机推荐
- JMeter 查看结果树监听器响应数据中文显示乱码解决方法
查看结果树监听器响应数据中文显示乱码解决方法 by:授客 QQ:1033553122 问题描述 使用监听器-查看结果树(View Results Tree Listener)过程中发现,响应数据面 ...
- 原来这样就可以开发出一个百万量级的Android相机
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ空间开发团队发表于云+社区专栏 最近我负责开发了一个跟Android相机有关的需求,新功能允许用户使用手机摄像头,快速拍摄特定尺寸 ...
- 洗礼灵魂,修炼python(38)--面向对象编程(8)—从算术运算符进一步认识魔法方法
上一篇文章了解了魔法方法,相信你已经归魔法方法至少有个概念了,那么今天就进一步的认识魔法方法.说这个之前,大脑里先回忆一下算术操作符. 什么是算术操作符?忘记没有?忘记了的自己倒回去看我前面的博文或者 ...
- 第七章 Hyper-V 2012 R2 授权管理
当企业或组织的规模越来越大时,维护某一项单独的应用可能会由特定的运维人员进行管理.考虑到安全风险的问题,一般特定的运维人员不会拥有域管理员权限.自 Windows Server 2012 开始,操作系 ...
- Gogs基本使用介绍
Gogs简介 Gogs 是一款类似GitHub的开源文件/代码管理系统(基于Git),Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs ...
- tidb在DDL语句方面的测试
Mysql与tidb测试数据为8000万行. 1.修改一个字段的列名,比如将“ctime”修改为“cctime”. Tidb测试: MySQL测试: 2.同一属性之间切换,即修改一个字段的属性大小.比 ...
- PHP APP端微信支付
前面已经写了手机APP支付宝支付,今天再把手机APP微信支付补上,前期的准备工作在这里就不多说了,可以参考微信支付开发文档,一定要仔细阅读开发文档,可以让你少踩点坑:准备工作完成后就是配置参数,调用统 ...
- 4、爬虫之mongodb
mongodb 简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品 ...
- android Application Component研究之Activity(一)
http://blog.csdn.net/windskier/article/details/7096521 终于下定决心写写ActivityManagerService的源码分析的文章了,Activ ...
- NOIP 2000 进制转换
题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1\times 10^2+2\time ...