【1】首先我们先创建一个带数组形式的json格式的数组

1)我们按照结构定义一个类,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;

namespace ceshi1
{
    class Data
    {
        public string text
        {
            get;
            set;
        }
        public int nodeType
        {
            get;
            set;
        }
        public int nodeID
        {
            get;
            set;
        }
        public bool leaf
        {
            get;
            set;
        }
        public int devicedID
        {
            get;
            set;
        }
        public List<Data> children
        {
            get;
            set;
        }

}
}

【2】我们来创造生成一个结构

//定义一个数据结构
            Data data = new Data();
            data.nodeType = 1;
            data.nodeID = 10;
            data.leaf = false;
            data.devicedID = 10;
            data.text = "直流监测";
            data.children = new List<Data>(){
                new Data(){
                    nodeType = 11,
                    nodeID = 101,
                    leaf = false,
                    devicedID = 101,
                    text = "广州局",
                    children = new List<Data>(){
                        new Data(){
                          nodeType = 111,
                          nodeID = 1011,
                          leaf = false,
                          devicedID = 1011,
                          text = "从化站",
                          children = new List<Data>(){
                            new Data(){
                                nodeType = 1111,
                                nodeID = 10111,
                                leaf = true,
                                devicedID = 10111,
                                text = "从化站#1主变",
                                children = new List<Data>(){}
                            },
                            new Data(){
                                nodeType = 1112,
                                nodeID = 10112,
                                leaf = true,
                                devicedID = 10112,
                                text = "从化站#2主变",
                                children = new List<Data>(){}
                            }
                          }
                        },
                        new Data(){
                          nodeType = 112,
                          nodeID = 1012,
                          leaf = false,
                          devicedID = 1012,
                          text = "板桥站",
                          children = new List<Data>(){
                              new Data(){
                                 nodeType = 1121,
                                 nodeID = 10121,
                                 leaf = true,
                                 devicedID = 1021,
                                 text = "板桥站#1主变",
                                 children = new List<Data>(){}
                              }
                          }
                        }
                    }
                },
                new Data(){
                    nodeType = 12,
                    nodeID = 102,
                    leaf = false,
                    devicedID = 102,
                    text = "深圳局",
                    children = new List<Data>(){
                        new Data(){
                            nodeType = 121,
                            nodeID = 1021,
                            leaf = false,
                            devicedID = 1021,
                            text = "福田站",
                            children = new List<Data>(){
                                new Data(){
                                    nodeType = 1211,
                                    nodeID = 10211,
                                    leaf = true,
                                    devicedID = 10211,
                                    text = "板桥站#1主变",
                                    children = new List<Data>(){}
                                }
                            }
                        }
                    }
                },
                new Data(){
                    nodeType = 13,
                    nodeID = 103,
                    leaf = false,
                    devicedID = 103,
                    text = "珠海局",
                    children = new List<Data>(){
                        new Data(){}
                    }
                }
            };

Console.WriteLine(data);

我们打印出来的对象为:ceshi1.Data;它是以一个对象的形式呈现;

【3】我们附加一点字符串/对象/json格式的转换方法讲解

首先引入第三方库:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

<a>将data序列化为json字符串
 string json = JsonConvert.SerializeObject(data);
 Console.WriteLine(json);

打印结果为(字符串):

{"text":"直流监测","nodeType":1,"nodeID":10,"leaf":false,"devicedID":10,"children":[{"text":"广州局","nodeType":11,"nodeID":101,"leaf":false,"devicedID":101,"children":[{"text":"从化站","nodeType":111,"nodeID":1011,"leaf":false,"devicedID":1011,"children":[{"text":"从化站#1主变","nodeType":1111,"nodeID":10111,"leaf":true,"devicedID":10111,"children":[]},{"text":"从化站#2主变","nodeType":1112,"nodeID":10112,"leaf":true,"devicedID":10112,"children":[]}]},{"text":"板桥站","nodeType":112,"nodeID":1012,"leaf":false,"devicedID":1012,"children":[{"text":"板桥站#1主变","nodeType":1121,"nodeID":10121,"leaf":true,"devicedID":1021,"children":[]}]}]},{"text":"深圳局","nodeType":12,"nodeID":102,"leaf":false,"devicedID":102,"children":[{"text":"福田站","nodeType":121,"nodeID":1021,"leaf":false,"devicedID":1021,"children":[{"text":"板桥站#1主

变","nodeType":1211,"nodeID":10211,"leaf":true,"devicedID":10211,"children":[]}]}]},{"text":"珠海局","nodeType":13,"nodeID":103,"leaf":false,"devicedID":103,"children":[{"text":null,"nodeType":0,"nodeID":0,"leaf":false,"devicedID":0,"children":null}]}]}

<b>有序列化,肯定有反序列化,将json反序列化为data,反序列化为对象
Data jsonData = JsonConvert.DeserializeObject<Data>(json);
Console.WriteLine(data);

打印结果为(对象):

ceshi1.Data;

<c>将json字符串格式化

JObject jo = (JObject)JsonConvert.DeserializeObject(json);
Console.WriteLine(jo);

打印结果为(json格式):

{
  "text": "直流监测",
  "nodeType": 1,
  "nodeID": 10,
  "leaf": false,
  "devicedID": 10,
  "children": [
    {
      "text": "广州局",
      "nodeType": 11,
      "nodeID": 101,
      "leaf": false,
      "devicedID": 101,
      "children": [
        {
          "text": "从化站",
          "nodeType": 111,
          "nodeID": 1011,
          "leaf": false,
          "devicedID": 1011,
          "children": [
            {
              "text": "从化站#1主变",
              "nodeType": 1111,
              "nodeID": 10111,
              "leaf": true,
              "devicedID": 10111,
              "children": []
            },
            {
              "text": "从化站#2主变",
              "nodeType": 1112,
              "nodeID": 10112,
              "leaf": true,
              "devicedID": 10112,
              "children": []
            }
          ]
        },
        {
          "text": "板桥站",
          "nodeType": 112,
          "nodeID": 1012,
          "leaf": false,
          "devicedID": 1012,
          "children": [
            {
              "text": "板桥站#1主变",
              "nodeType": 1121,
              "nodeID": 10121,
              "leaf": true,
              "devicedID": 1021,
              "children": []
            }
          ]
        }
      ]
    },
    {
      "text": "深圳局",
      "nodeType": 12,
      "nodeID": 102,
      "leaf": false,
      "devicedID": 102,
      "children": [
        {
          "text": "福田站",
          "nodeType": 121,
          "nodeID": 1021,
          "leaf": false,
          "devicedID": 1021,
          "children": [
            {
              "text": "板桥站#1主变",
              "nodeType": 1211,
              "nodeID": 10211,
              "leaf": true,
              "devicedID": 10211,
              "children": []
            }
          ]
        }
      ]
    },
    {
      "text": "珠海局",
      "nodeType": 13,
      "nodeID": 103,
      "leaf": false,
      "devicedID": 103,
      "children": [
        {
          "text": null,
          "nodeType": 0,
          "nodeID": 0,
          "leaf": false,
          "devicedID": 0,
          "children": null
        }
      ]
    }
  ]
}

到这一步,数据已经生成了,各位看官想要的三种数据形式都已经有了,接下来就是我们的重头戏了;

【4】迭代遍历取节点

需求:取出最底层的leaf = true或者Children为null的情况的节点所有的nodeType/nodeID/devicedID/text值;并以数组或者list的方式返回

a)下面我们定义一个迭代方法:

public static void FindAll(Data inputData, ref List<Data> data)
        {
            if (inputData.leaf)
            {
                data.Add(inputData);
            }
            else
            {
                if (inputData.children == null) return;
                foreach (var item in inputData.children)
                {
                    if (item.leaf)
                    {
                        data.Add(item);
                    }
                    else
                    {
                        FindAll(item,ref data);
                    }
                }
            }
        }

b)我们在main函数(或者需要的地方)中调用,加上如下代码:

   //序列化为json字符串
            string json = JsonConvert.SerializeObject(data);
            //Console.WriteLine(json);

//反序列化为对象
            Data jsonData = JsonConvert.DeserializeObject<Data>(json);
            //Console.WriteLine(data);

//json格式化
            JObject jo = (JObject)JsonConvert.DeserializeObject(json);
            //Console.WriteLine(jo);

//问题:
            //取出最底层的leaf = true或者Children为空的情况的节点所有的nodeType/nodeID/devicedID/text值?
            //需要迭代遍历?
            var resultData = new List<Data>();
            FindAll(data, ref  resultData);
            Console.ReadKey();

【5】检验是否正确

到这一步,我们基本上已经完成了,我们来测试一下最终的结果,遍历一下这个返回结果resultData

    for (int i = 0; i < resultData.Count;i++ )
            {
                Console.WriteLine(JsonConvert.SerializeObject(resultData[i]));
            }

输出结果如下:

{"text":"从化站#1主变","nodeType":1111,"nodeID":10111,"leaf":true,"devicedID":10111,"children":[]}
{"text":"从化站#2主变","nodeType":1112,"nodeID":10112,"leaf":true,"devicedID":10112,"children":[]}
{"text":"板桥站#1主变","nodeType":1121,"nodeID":10121,"leaf":true,"devicedID":1021,"children":[]}
{"text":"板桥站#1主变","nodeType":1211,"nodeID":10211,"leaf":true,"devicedID":10211,"children":[]}

显然,取出了全部的叶子结点

【6】结果源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;
using System.Data;
using System.Diagnostics;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ceshi1
{

class Program
    {
        //public ArrayList al = new ArrayList();
        //public void GetAllDirList(string strBaseDir)
        //{

//    DirectoryInfo di = new DirectoryInfo(strBaseDir);
        //    DirectoryInfo[] dirA = di.GetDirectories();
        //    for (int i = 0; i < dirA.Length; i++)
        //    {
        //        al.Add(dirA[i].FullName);
        //        Console.WriteLine(dirA[i]);
        //        Console.WriteLine(dirA[i].FullName);
        //        GetAllDirList(dirA[i].FullName);
        //    }
        //}

static void Main(string[] args)
        {
            //定义一个数据结构
            Data data = new Data();
            data.nodeType = 1;
            data.nodeID = 10;
            data.leaf = false;
            data.devicedID = 10;
            data.text = "直流监测";
            data.children = new List<Data>()
            {
                new Data()
                {
                    nodeType = 11,
                    nodeID = 101,
                    leaf = false,
                    devicedID = 101,
                    text = "广州局",
                    children = new List<Data>()
                    {
                        new Data()
                        {
                            nodeType = 111,
                            nodeID = 1011,
                            leaf = false,
                            devicedID = 1011,
                            text = "从化站",
                            children = new List<Data>()
                            {
                                new Data()
                                {
                                    nodeType = 1111,
                                    nodeID = 10111,
                                    leaf = true,
                                    devicedID = 10111,
                                    text = "从化站#1主变",
                                    children = new List<Data>() {}
                                },
                                new Data()
                                {
                                    nodeType = 1112,
                                    nodeID = 10112,
                                    leaf = true,
                                    devicedID = 10112,
                                    text = "从化站#2主变",
                                    children = new List<Data>() {}
                                }
                            }
                        },
                        new Data()
                        {
                            nodeType = 112,
                            nodeID = 1012,
                            leaf = false,
                            devicedID = 1012,
                            text = "板桥站",
                            children = new List<Data>()
                            {
                                new Data()
                                {
                                    nodeType = 1121,
                                    nodeID = 10121,
                                    leaf = true,
                                    devicedID = 1021,
                                    text = "板桥站#1主变",
                                    children = new List<Data>() {}
                                }
                            }
                        }
                    }
                },
                new Data()
                {
                    nodeType = 12,
                    nodeID = 102,
                    leaf = false,
                    devicedID = 102,
                    text = "深圳局",
                    children = new List<Data>()
                    {
                        new Data()
                        {
                            nodeType = 121,
                            nodeID = 1021,
                            leaf = false,
                            devicedID = 1021,
                            text = "福田站",
                            children = new List<Data>()
                            {
                                new Data()
                                {
                                    nodeType = 1211,
                                    nodeID = 10211,
                                    leaf = true,
                                    devicedID = 10211,
                                    text = "板桥站#1主变",
                                    children = new List<Data>() {}
                                }
                            }
                        }
                    }
                },
                new Data()
                {
                    nodeType = 13,
                    nodeID = 103,
                    leaf = false,
                    devicedID = 103,
                    text = "珠海局",
                    children = new List<Data>()
                    {
                        new Data() {}
                    }
                }
            };

//序列化为json字符串
            string json = JsonConvert.SerializeObject(data);
            //Console.WriteLine(json);

//反序列化为对象
            Data jsonData = JsonConvert.DeserializeObject<Data>(json);
            //Console.WriteLine(data);

//json格式化
            JObject jo = (JObject)JsonConvert.DeserializeObject(json);
            //Console.WriteLine(jo);

//问题:
            //取出最底层的leaf = true或者Children为空的情况的节点所有的nodeType/nodeID/devicedID/text值?
            //需要迭代遍历?
            var resultData = new List<Data>();
            FindAll(data, ref  resultData);
            //Console.WriteLine(resultData);

for (int i = 0; i < resultData.Count;i++ )
            {
                Console.WriteLine(JsonConvert.SerializeObject(resultData[i]));
            }
            Console.ReadKey();
        }

public static void FindAll(Data inputData, ref List<Data> data)
        {
            if (inputData.leaf)
            {
                data.Add(inputData);
            }
            else
            {
                if (inputData.children == null) return;
                foreach (var item in inputData.children)
                {
                    if (item.leaf)
                    {
                        data.Add(item);
                    }
                    else
                    {
                        FindAll(item,ref data);
                    }
                }
            }
        }   
}
}

【6】监测过程源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;
using System.Data;
using System.Diagnostics;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ceshi1
{

class Program
    {
        //public ArrayList al = new ArrayList();
        //public void GetAllDirList(string strBaseDir)
        //{

//    DirectoryInfo di = new DirectoryInfo(strBaseDir);
        //    DirectoryInfo[] dirA = di.GetDirectories();
        //    for (int i = 0; i < dirA.Length; i++)
        //    {
        //        al.Add(dirA[i].FullName);
        //        Console.WriteLine(dirA[i]);
        //        Console.WriteLine(dirA[i].FullName);
        //        GetAllDirList(dirA[i].FullName);
        //    }
        //}

static void Main(string[] args)
        {
            //定义一个数据结构
            Data data = new Data();
            data.nodeType = 1;
            data.nodeID = 10;
            data.leaf = false;
            data.devicedID = 10;
            data.text = "直流监测";
            data.children = new List<Data>(){
                new Data(){
                    nodeType = 11,
                    nodeID = 101,
                    leaf = false,
                    devicedID = 101,
                    text = "广州局",
                    children = new List<Data>(){
                        new Data(){
                          nodeType = 111,
                          nodeID = 1011,
                          leaf = false,
                          devicedID = 1011,
                          text = "从化站",
                          children = new List<Data>(){
                            new Data(){
                                nodeType = 1111,
                                nodeID = 10111,
                                leaf = true,
                                devicedID = 10111,
                                text = "从化站#1主变",
                                children = new List<Data>(){}
                            },
                            new Data(){
                                nodeType = 1112,
                                nodeID = 10112,
                                leaf = true,
                                devicedID = 10112,
                                text = "从化站#2主变",
                                children = new List<Data>(){}
                            }
                          }
                        },
                        new Data(){
                          nodeType = 112,
                          nodeID = 1012,
                          leaf = false,
                          devicedID = 1012,
                          text = "板桥站",
                          children = new List<Data>(){
                              new Data(){
                                 nodeType = 1121,
                                 nodeID = 10121,
                                 leaf = true,
                                 devicedID = 1021,
                                 text = "板桥站#1主变",
                                 children = new List<Data>(){}
                              }
                          }
                        }
                    }
                },
                new Data(){
                    nodeType = 12,
                    nodeID = 102,
                    leaf = false,
                    devicedID = 102,
                    text = "深圳局",
                    children = new List<Data>(){
                        new Data(){
                            nodeType = 121,
                            nodeID = 1021,
                            leaf = false,
                            devicedID = 1021,
                            text = "福田站",
                            children = new List<Data>(){
                                new Data(){
                                    nodeType = 1211,
                                    nodeID = 10211,
                                    leaf = true,
                                    devicedID = 10211,
                                    text = "板桥站#1主变",
                                    children = new List<Data>(){}
                                }
                            }
                        }
                    }
                },
                new Data(){
                    nodeType = 13,
                    nodeID = 103,
                    leaf = false,
                    devicedID = 103,
                    text = "珠海局",
                    children = new List<Data>(){
                        new Data(){}
                    }
                }
            };

//序列化为json字符串
            string json = JsonConvert.SerializeObject(data);
            // Console.WriteLine(json);

//反序列化为对象
            Data jsonData = JsonConvert.DeserializeObject<Data>(json);
            //取出最底层的leaf = true或者Children为空的情况的节点所有的nodeType/nodeID/devicedID/text值?

FindAll(jsonData);
            Console.ReadKey();
        }

public static void FindAll(Data inputData)
        {
            if (inputData.leaf)
            {
                Console.WriteLine("leaf:{0}, nodeType:{1}, nodeID:{2}, devicedID:{3}, text: {4}, children is null:{5}"
                    , inputData.leaf
                    , inputData.nodeType
                    , inputData.nodeID
                    , inputData.devicedID
                    , inputData.text
                    , inputData.children == null);
            }
            else
            {
                if (inputData.children == null) return;
                foreach (var item in inputData.children)
                {
                    if (item.leaf)
                    {
                        Console.WriteLine(
                            "leaf:{0}, nodeType:{1}, nodeID:{2}, devicedID:{3}, text: {4}, children is null:{5}"
                            , item.leaf
                            , item.nodeType
                            , item.nodeID
                            , item.devicedID
                            , item.text
                            , item.children == null);
                        //我想把取出来结果以对象的方式放到数组或者一个List集合里面去,然后再返回这个集合或者数组(最好用数组),谢谢
                       
//数组类似于:[{leaf:True, nodeType:1111, nodeID:10111, devicedID:10111,
text: 从化站#1主变, children is null:False},{leaf:True, nodeType:1112,
nodeID:10112, devicedID:10112, text: 从化站#2主变, children is null:False}]

}
                    else
                    {
                        FindAll(item);
                    }
                }
            }
        }
    }
}

本文源于zhuxiaoge(http://www.cnblogs.com/zhuxiaoge/p/7090544.html),如有转载请标明出处,不甚感激!!!

c#迭代遍历带数组的json格式数据的更多相关文章

  1. JS学习笔记(3)--json格式数据的添加,删除及排序方法

    这篇文章主要介绍了json格式数据的添加,删除及排序方法,结合实例形式分析了针对一维数组与二维数组的json格式数据进行增加.删除与排序的实现技巧,需要的朋友可以参考下   本文实例讲述了json格式 ...

  2. fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map

    作者:buster2014 推荐:长安散人 fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map JSON字符串与Java对象的转换 1.将Java对象或Java ...

  3. JSon_零基础_002_将List类型数组转换为JSon格式的对象字符串,返回给界面

    将List类型数组转换为JSon格式的对象字符串,返回给界面 所需要导入的包: 编写bean: package com.west.webcourse.po; /** * 第01步:编写bean类, * ...

  4. JSon_零基础_001_将布尔类型数组转换为JSon格式字符串,返回给界面

    将布尔类型数组转换为JSon格式字符串,返回给界面 需要导入包: 编写bean: package com.west.webcourse.po; /** * 第01步:编写bean类, * 下一步com ...

  5. ajax接收遍历处理json格式数据

    ajax在前后端的交互中应用非常广泛,通过请求后台接口接收处理json格式数据展现在前端页面. 下面我们来简单用 ajax在本地做一个接收并处理json的小例子 首先我们要新建一个叫做data的jso ...

  6. Python:numpy数组转换为json格式

    在python中,如何将一个numpy数组转换为json格式? 这是最近遇到的一个问题,做个笔记. 假设arr为numpy数组,将其转换为json格式: 总体思想是①首先转换为python的list, ...

  7. iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  8. 解析json格式数据

    实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...

  9. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

随机推荐

  1. vagrant系列四:vagrant搭建redis与redis的监控程序redis-stat

    上一篇php7环境的搭建 真是火爆.仅仅两天时间,就破了我之前swagger系列的一片文章,看来,大家对搭建好开发环境真是情有独钟. 为了訪问量,我今天再来一篇redis的搭建. 当然不能仅仅是red ...

  2. Android 与H5之间的js交互

    之前项目做过一些Android和Html5之间js交互方面的东西,今天有时间就总结一下: 一.为什么要进行js交互: 为了方便原生开发和Html之间数据传递,在静态页面的情况下可以改变原生开发的页面: ...

  3. 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元

    [BZOJ1778][Usaco2010 Hol]Dotp 驱逐猪猡 Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300 ...

  4. [SCOI2009]生日礼物(尺取法)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2201  Solved: 1186[Submit][Status][Discuss] Descript ...

  5. jedisLock—redis分布式锁实现(转)

    一.使用分布式锁要满足的几个条件: 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体 ...

  6. ArcGIS API for js Legend(图例)

    1.说明 有关怎么把ArcGIS API for js部署到IIS上,请参考我上面的写的博客https://www.cnblogs.com/net064/p/10302660.html 2.运行效果 ...

  7. POJ 1845-Sumdiv【经典数学题目---求因子和】

    转载请注明出处:http://blog.csdn.net/lyy289065406/article/details/6648539 優YoU  http://user.qzone.qq.com/289 ...

  8. cocos2dx的ui封装

    cocos2dx里加载cocosudio导出的ui配置文件,在这之上封装了一下,封装核心类包括 UIManager,UILayer,UIOwner UIManager是所有ui总的管理类,代码如下: ...

  9. Mysql 学习1

      Mysql学习   一.数据库   1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: 可存储大量数据: 方便检索: 保持数据的一致性.完整 ...

  10. ABAP操作EXCEL (号称超级版)

    [转自http://www.cnblogs.com/VerySky/articles/2170014.html] *------------------------------------------ ...