c#学习教程之JSON文件及解析实例

目录
  • 一、JSON文件介绍
  • 二、JSO语法规则
  • 三、引入JSON库文件
  • 四、利用JSON.Mapper去解析JSON文件
    • 4.1 JSON为数组
    • 4.2 JSON为数组,使用实体类
  • 五、利用Json.MApper结合泛型去解析JSON文件
    • 5.1JSON为数组
    • 5.2JSON为数组,使用集合去解析
    • 5.3JSON为对象
    • 5.4复杂的JSON文件解析
  • 六、字符串转化为JSON
  • 七、JSON常用工具
    • 1.JSON格式校验工具
    • 2.JSON数据生成c#实体类
  • 总结

一、JSON文件介绍

JSON是存储和交换文本的语法,类似于XML

但比XML更小,更容易解析,于XML一样是一种数据格式

JSON是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,更容易编写以及解析

例如

[
{"id":2,"name":"星河爆破","number":999},
{"id":3,"name":"九星连珠","number":9},
{"id":4,"name":"一语成谶","number":999}
]

二、JSO语法规则

  • 数据保存在键值对中
  • 数据由逗号分割
  • 花括号保存对象
  • 方括号保存数组

三、引入JSON库文件

JSON解析器和JSON库支持许多不同的编程语言

能对json文件进行解析的有很多,详见JSON官网,http://www.json.org/json-en.html

在主要是使用的是LitJSON或者Newtonsoft.Json,LitJSON使用NuGet安装,界面如下

四、利用JSON.Mapper去解析JSON文件

4.1 JSON为数组

原始json内容

json.txt:

[
{"id":2,"name":"星河爆破","number":999},
{"id":3,"name":"九星连珠","number":9},
{"id":4,"name":"一语成谶","number":999}
]

思想:

1.利用File去读取json文件
2.通过JsonMapper转为对象(jsondata)
3.使用索引,遍历jsondata进行输出

代码:

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

//引入LitJson
using LitJson;

namespace json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //JsonMapper类
            //ToObject方法可以将一个json字符串进行解析,
            //解析的结果是json.date
            //我们使用jsonMapper去解析json文本
            //jsondata代表一个数据或者对象
            //json217.txt为数组[],所以jsonData为数组
            //注意json文件位置,需要在bug目录下
            JsonData jsonData =JsonMapper.ToObject(File.ReadAllText("json217.txt")) ;
            //使用foreach去遍历数组信息
            //temp也是jsondata类型的,但是temp是一个对象
            foreach (JsonData temp in jsonData)
            {
                //通过索引其去取得temp中的value
                //返回值还是jsondata类型
                JsonData idvalue = temp["id"];
                JsonData namevalue = temp["name"];
                JsonData numbervalue = temp["number"];

                //将jsondata转化为字符串进行输出
                //name本身就为str,所以不用转换
                int id = Int32.Parse(idvalue.ToString());
                int number = Int32.Parse(numbervalue.ToString());

                //输出
                Console.WriteLine(id+":"+ namevalue + ":" + number);
            }

            Console.ReadKey();
        }
    }
}

运行结果

4.2 JSON为数组,使用实体类

原始json内容

json217.txt:

[
{"id":2,"name":"星河爆破","number":999},
{"id":3,"name":"九星连珠","number":9},
{"id":4,"name":"一语成谶","number":999}
]

思想:

1.根据JSON文件格式,建立实体类,例如根据json217.txt建立实体类Magic,包含id、name、number三个字段以及一个方法
2.根据json格式,新建list,使用Magic实体类作为泛型,新建magicList类
List<Magic> magicList = new List<Magic>();
3.通过JsonMapper转为对象(jsondata),赋值到magicList中
4.对magicList进行遍历输出

新建一个Magic实体类用于解析

Magic.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace json操作
{
    class Magic
    {
        public int id;

        public string name;

        public int number;

        public override string ToString()
        {
            return string.Format("id:{0},name:{1},numebr:{2}",id,name,number);
        }
    }
}

代码:

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

//引入LitJson
using LitJson;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //因为json文件为集合,所以新建一个集合
            List<Magic> magicList = new List<Magic>();

            //依旧使用JsonMapper去进行解析
            JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json217.txt"));
            foreach (JsonData temp in jsonData)
            {
                //创建一个新对象
                Magic magic = new Magic();

                //通过索引其去取得temp中的value
                //返回值还是jsondata类型
                JsonData idvalue = temp["id"];
                JsonData namevalue = temp["name"];
                JsonData numbervalue = temp["number"];

                //将jsondata转化为字符串进行输出
                //name本身就为str,所以不用转换
                int id = Int32.Parse(idvalue.ToString());
                int number = Int32.Parse(numbervalue.ToString());

                magic.id = id;
                magic.number = number;
                magic.name = namevalue.ToString();
                magicList.Add(magic);

            }
            foreach (var temp in magicList)
            {
                Console.WriteLine(temp);
            }
            Console.ReadKey();
        }
    }
}

运行结果

可以发现,结果是一样的,但是如此做会增加代码量,不够方便,下面介绍通过泛型去解析JSON

五、利用Json.MApper结合泛型去解析JSON文件

5.1JSON为数组

原始json内容

json217.txt:

[
{"id":2,"name":"星河爆破","number":999},
{"id":3,"name":"九星连珠","number":9},
{"id":4,"name":"一语成谶","number":999}
]

思想:

1.对JSON文件进行解析,发现为外层为数组格式,可以认为是一个Magic对象数组
2.使用泛型去解析,用<>表示泛型,如下一个Magic对象数组表示为Magic[]
JsonMapper.ToObject<Magic[]>
注意:json里面的键必须与实体类对应
3.遍历Magic[]

代码:

namespace json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //使用泛型去解析json
            //因为读取的文件格式为magic实体类的数组,所以返回是个magic的数组
            //注意实体类需要对应上,
            Magic[] magicArray=JsonMapper.ToObject<Magic[]>(File.ReadAllText("json217.txt"));
            foreach(var temp in magicArray)
            {
                Console.WriteLine(temp);
            }
            Console.Read();
        }
    }
}

运行结果:

5.2JSON为数组,使用集合去解析

思想:

1.对JSON文件进行解析,发现为外层为数组格式,也可以认为是个集合
2.使用泛型去解析,用<>表示泛型,如下一个Magic对象数组表示为Magic[]
JsonMapper.ToObject<Magic[]>改为JsonMapper.ToObject<List<Magic>>
注意:json里面的键必须与实体类对应
3.遍历List<Magic

代码:

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

//引入LitJson
using LitJson;
namespace json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //任何可以数组的地方都可以使用一个集合
            List<Magic> magicklist = JsonMapper.ToObject<List<Magic>>(File.ReadAllText("json217.txt"));
            foreach (var temp in magicklist)
            {
                Console.WriteLine(temp);
            }
            Console.Read();
        }
    }
}

运行结果:

5.3JSON为对象

原始json内容

TextFlie.txt:

{
 "status": 1,
 "apiId": "89757",
 "date": "2022 / 01 / 24 13: 12: 10",
 "message": null,
 "devicelist": [{
				"productcode": "126345",
				"devicecode": "15632478",
				"url": "http://sssss/sssss/ssss/ssss"
				},
				{
				"productcode": "222222",
				"devicecode": "222222",
				"url": "http://sssss/sssss/ssss/ssss"
				},
				{
				"productcode": "333333",
				"devicecode": "333333",
				"url": "http://sssss/sssss/ssss/ssss"
				}
		]
}

思想:

1.对JSON文件进行解析,发现为整体为对象,对象中包括status、apiId、date、message、devicelist属性
2.建立实体类模型,新建类IotDevice类,分为IotDevice类和DevicelistItem类
IotDevice类包含:status、apiId、date、message、devicelist(继承与DevicelistItem)
DevicelistItem类包含:productcode、devicecode、url
有点像俄罗斯套娃的感觉
3.使用json.mapper<实体类>进行解析,返回值为实体类的对象
重点:建立实体类

IotDevice.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace json操作
{
    public class DevicelistItem
    {
        public string productcode { get; set; }
        public string devicecode { get; set; }
        public string url { get; set; }

        public override string ToString()
        {
            return string.Format("productcode:{0},devicecode:{1},url:{2}", productcode, devicecode, url);
        }
    }

    public class IotDevice
    {
        public int status { get; set; }
        public string apiId { get; set; }
        public string date { get; set; }
        public string message { get; set; }
        public List<DevicelistItem> devicelist { get; set; }
        public override string ToString()
        {
            return string.Format("status:{0},apiId:{1},date:{2},message:{3},devicelist:{4},", status, apiId, date, message, devicelist);
        }
    }
}

代码:

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

//引入LitJson
using LitJson;
namespace _032json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //json文档整体为IotDevice类型,所以转换的时候泛型为<IotDevice>
            //返回值为IotDevice对象
            IotDevice iotdevice = JsonMapper.ToObject <IotDevice>(File.ReadAllText("TextFile1.txt"));
            Console.WriteLine(iotdevice);
            foreach (var temp in iotdevice.devicelist)
            {
                Console.WriteLine(temp);
            }
            Console.Read();
        }
    }
}

运行结果:

5.4复杂的JSON文件解析

原始json内容

TextFlie2.txt:

在这里插入代码片

六、字符串转化为JSON

代码:

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

//引入LitJson
using LitJson;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //新建IotDevice的实体类
            IotDevice device1 = new IotDevice();
            device1.date = "2022/02/17";
            device1.apiId = "89757";
            //转为json的字符串
            string json = JsonMapper.ToJson(device1);
            Console.WriteLine(json);
            Console.Read();
        }
    }
}

运行结果:

七、JSON常用工具

1.JSON格式校验工具

可以用来对写的JSON文档进行校验,确保书写正确

地址:http://tools.jb51.net/code/json

2.JSON数据生成c#实体类

当JSON设计多层时,可以使用工具,自动生成实体类模板

地址:http://tools.jb51.net/code/json2csharp

总结

到此这篇关于c#学习教程之JSON文件及解析的文章就介绍到这了,更多相关c# JSON文件解析内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#基于JsonConvert解析Json数据的方法实例

    目录 1 解析字典 1)解析为 JObject 2)解析为 Dictionary 3)解析为封装类 2 解析一维数组 1)解析为 JArray 2)解析为数组 3)解析为列表 3 解析二维数组 1)解析为 JArray 4 解析数组字典 1)解析为 JObject-JArray 2)解析为封装类 5 解析字典数组 1)解析为 JArray-JObject 2)解析为数组封装类 3)解析为列表封装类 6 解析 Vector3 点集 1)字典格式点 7 从文件中解析 总结 1 解析字典 1)解析为

  • C#解析JSON实例

    本文以实例形式讲述了C#解析JSON的方法,C#封装了对XML和JSON解析的类库,使用相当方便!具体用法如下: 1.主要用到的类: 主要用到了JavaScriptSerializer类,该类在System.Web.Script.Serialization命名空间(在System.Web.Extensions.dll 中),需要把.NET版本修改为 .NET Framework 4(默认是.NET Framework 4 Client Profile)才能在Add Reference的 .NET

  • c#版json数据解析示例分享

    JSON与XML的比较◆可读性JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解.◆文件大小与传输XML允许使用方便的标签,所以文件尺寸是要比JSON大的.而且JSON源于Javascript,所以天生的主战场是Javascript与网络,在这里,JSON有着XML无法赶超的优势. JSON语法1. JSON 语法是 JavaScript 对象表示法语法的子集. 数据在名称/值对中:名称是字符串,使用双引号表示.值可以是:数字(整数或浮点数),字符串(在双引号中)

  • 解析C#拼接Json串的几种方法

    C#定义多行字符串的方式 在定义的前面加上@符号: string aa = @"asdfsdfsd fsdsfsdfsdfsdfsdfsdfs safasfsadfsdfasfsfsdfsd "; 在C#中拼接字符串有几种方法 1. 利用  JsonConvert.SerializeObject方法 (Nuget获取Newtonsoft.Json Package),需要Newtonsoft.Json 支持. string uid = "22"; var abcObj

  • C#解析json文件的实现代码

    C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在各种网络.平台和程序之间传输.JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成. JSON与XML的比较 ◆可读性 JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解.◆文件大小与传输 XML允许使用方便的标签,所以文件尺寸是要比

  • jQuery插件学习教程之SlidesJs轮播+Validation验证

    SlidesJs(轮播支持触屏)--官网(http://slidesjs.com) 1.简介 SlidesJs是基于Jquery(1.7.1+)的响应幻灯片插件.支持键盘,触摸,css3转换. 2.代码 <!doctype html> <head> <style> /* Prevents slides from flashing */ #slides { display:none; } </style> <script src="http:/

  • PHP内核学习教程之php opcode内核实现

    opcode是计算机指令中的一部分,用于指定要执行的操作, 指令的格式和规范由处理器的指令规范指定. 除了指令本身以外通常还有指令所需要的操作数,可能有的指令不需要显式的操作数. 这些操作数可能是寄存器中的值,堆栈中的值,某块内存的值或者IO端口中的值等等. 通常opcode还有另一种称谓:字节码(byte codes). 例如Java虚拟机(JVM),.NET的通用中间语言(CIL: Common Intermeditate Language)等等. 1. Opcode简介 opcode是计算

  • WebGL学习教程之Three.js学习笔记(第一篇)

    webgl介绍 WebGL是一种3D绘图协议,它把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染. WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏. 原生的WebGl比较复杂,主要通过对顶点着色器和片元着色器的操作,来实现渲染,但实现起来比较复杂,需要一定的数学基础,但更多的是需要学习

  • ES6学习教程之Promise用法详解

    前言 promise用了这么多年了,一直也没有系统整理过.今天整理整理promise的相关东西,感兴趣的可以一起看一看.我尽量用更容易理解的语言来剖析一下promise 我准备分两篇文章来说明一下promise 一篇来理解和使用promise(本篇) 另一篇来从promise使用功能的角度来剖析下promise的源码(下一篇) 1.什么是Promise 我的理解是:实现让我们用同步的方式去写异步代码的一种技术.是异步解决方案的一种. 他可以将多个异步操作进行队列化,让它们可以按照我们的想法去顺序

  • Go语言学习教程之goroutine和通道的示例详解

    目录 goroutine 通道 Range 和 Close Select 官方留的两道练习题 等价的二叉树 网络爬虫 源码地址 goroutine goroutine是由Go运行时管理的轻量级线程. go f(x, y, z)在一个新的goroutine中开始执行f(x, y,z). goroutines运行在相同的地址空间中,所以对共享的内存访问必须同步.sync包提供了基本的同步原语(synchronization primitives),比如互斥锁(mutual exclusion loc

  • Angular4学习教程之DOM属性绑定详解

    前言 DOM 元素触发的一些事件通过 DOM 层级结构传播,事件首先由最内层的元素开始,然后传播到外部元素,直到它们到根元素,这种传播过程称为事件冒泡.本文主要介绍了关于Angular4 DOM属性绑定的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 简介 使用插值表达式将一个表达式的值显示在模版上 <img src="{{imgUrl}}" alt=""> <h1>{{productTitle}}</h1&

  • Angular4学习教程之HTML属性绑定的方法

    前言 本文主要给大家介绍了关于Angular4 HTML属性绑定的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 简介 基本HTML属性 <td [attr.colspan]="tableColspan"></td> Css 类绑定 <!-- 第一种情况 class 类全部替换 --> <div [class]="divClass">CSS 类绑定,[class] 全部替换的例子</d

  • python基础教程之csv文件的写入与读取

    目录 csv的简单介绍 csv的写入 第一种写入方法(通过创建writer对象) 第二种写入方法(使用DictWriter可以使用字典的方式将数据写入) csv的读取 通过reader()读取 通过dictreader()读取 总结 csv的简单介绍 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本格式,用以存储表格数据,包括数字或者字符.很多程序在处理数据时都会碰到csv这种格式的文件.python自带了csv模

  • Vue-cli项目获取本地json文件数据的实例

    在自己做的vue demo项目中,我想通过在本地添加一些json数据,写到json文件中,并且通过异步请求获取到,然后加载数据. axios.get('http://localhost:8080/datas/json') 然而在这一过程中,我的访问总是404.通过查阅,我发现,在vue-cli基础上构建的项目中,只有static目录才是vue-cli向外暴露的静态数据文件夹,我放在static下的图片可以正常访问到,我是在static同级目录新建了datas目录,将json文件放入datas目录

  • JAVA 格式化JSON数据并保存到json文件中的实例

    使用fastjson格式化json数据并保存到文件 /** * 将JSON数据格式化并保存到文件中 * @param jsonData 需要输出的json数 * @param filePath 输出的文件地址 * @return */ public static boolean createJsonFile(Object jsonData, String filePath) { String content = JSON.toJSONString(jsonData, SerializerFeat

随机推荐