一、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文档进行校验,确保书写正确
地址:https://www.bejson.com/

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

当JSON设计多层时,可以使用工具,自动生成实体类模板
地址:https://www.bejson.com/convert/json2csharp/

c#学习—JSON文件及解析相关推荐

  1. Qt实现对json文件的解析

    json是一种轻量级的数据结构,其内部的结构是一种键值对(key-value)的组合,最外层是{ }.key是带双引号的字符串常亮,用于获取和存储:value的值可以是bool变量,字符串常量,对象或 ...

  2. android 访问服务器josn文件,Android客户端对服务器回来的json文件进行解析

    Android客户端对服务器返回的json文件进行解析 和解析XML的方式大同小异,只有解析方式存在区别: /** * 解析服务器返回来的json数据 * @param content * @retu ...

  3. 安卓加载asset中的json文件_Android解析Asset目录下的json文件

    在app module中的src/main/assets目录下我们准备了两个json文件: destination.json如下: { "main/tabs/sofa": { &q ...

  4. qt中生成含有中文的json文件和解析json文件

    提要 生成的json文件在程序加载解析时出现上述错误,究其原因是生成json文件过程中编码问题.qt编译器默认的编码格式为utf-8,而windows一般为gbk编码,所以就需要在生成本地json文件 ...

  5. wps解析json数据_浏览器处理2500MB JSON文件的解析与绘图问题(实践分享,非战斗人员请忽略)...

    最近在做一个浏览器画数据图的任务. 任务其实很简单,浏览器通过ajax请求拿到服务端已经生成好的json文件,然后在前端浏览器绘制相应的折线图,饼状图等. 很丑陋的dataflow 起初我的做法 le ...

  6. android studio中存放json文件,获取assets文件下下文件,获取本地json文件并解析

    转自http://blog.csdn.net/yanxiaosa/article/details/70859927 以前看过这些知识,今天用到的时候,发现自己忘记了,都不知道assets文件夹在哪个目 ...

  7. java guava json文件_Json解析文件位置的问题

    有这么一段Json { "name": "java3d:vecmath:1.3.1" }, { "name": "net.sf.t ...

  8. python json解析_python读取json文件并解析

    原博文 2018-07-09 18:35 − # -*- coding: utf-8 -*- import os import json import sys reload(sys) sys.setd ...

  9. vs code c语言json文件配置,解析VScode在Windows环境下c_cpp_properties.json文件配置问题(推荐)...

    前言继承是OOP设计中的重要概念.在C++语言中,派生类继承基类有三种继承方式:私有继承(private).保护继承(protected)和公有继承(public).一.继承规则继承是C++中的重要特 ...

最新文章

  1. 4月11日云栖精选夜读 | 阿里云异构计算发布:轻量级GPU云服务器实例VGN5i
  2. android 设置布局横屏竖屏
  3. PHP---微信JS-SDK获取access_token/jsapi_ticket/signature权限签名算法,php/thinkphp实现微信分享自定义文字和图片...
  4. 【leetcode】42. Trapping Rain Water 计算坑洼地的积水量
  5. html怎么防止表单重复提交,js防止表单重复提交的解决方法
  6. C语言 goto 语句 - C语言零基础入门教程
  7. 应用开发框架之——根据数据表中的存储的方法名称来调用方法
  8. Oracle数据库,当DML操作时执行触发器记录日志
  9. go语言slice使用的时候遇到的奇怪现象以及分析
  10. 面向对象(Python):学习笔记之模块和包
  11. 邢波老师致广大学员的一封信(2010-10-26)
  12. 图解stylegan
  13. 企业数字化转型:数字化成熟度评估模型
  14. navicat导入.mdf文件到远程sqlserver数据库
  15. task4b_Nature_Pan_Cancer_词云
  16. java调用快捷支付接口_Android客户端集成支付宝快捷支付
  17. UNIX v6 fork()源码分析
  18. 微信小程序——订阅消息与微信公众号模板消息
  19. requests 已过时,初探协程与异步 http 框架 httpx
  20. Docker容器获取局域网ip(使用macvlan)

热门文章

  1. 关于 Flutter JSON 序列化
  2. rational clearcase 提交活动注意
  3. I2C使用上拉电阻详解
  4. unpivot用法 MySql_unpivot和PostgreSQL
  5. l2范数求导_最小二乘法(LS算法):L2范数(计算残差平方和)的一个实际应用,为,具体...
  6. (C/C++)实现User类
  7. 微信开发者工具的目录
  8. 组成原理—内存及内存与CPU的关系
  9. 解除445端口的占用
  10. 图片中的公式转化为Word公式