什么是Json?
JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式,主要用于数据的序列化和交互。常用于Web中,其他领域也经常出现JSON的身影。
与xml相比,更快,更小,更容易解析/.
Json的特点
Json的最小单元式键值对,即Key-Value组合。它的数据结构需要满足以下条件:
由键值对组成,每个键(属性名)都是一个字符串,后面跟着一个值。
值可以是字符串、数字、布尔值、对象、数组、null等。
JSON对象是由一对大括号{}包围的键值对集合,键和值之间用冒号 : 分隔。
JSON数组是由一对方括号 [] 包围的值的有序列表,值之间用逗号 , 分隔。
{
"name": "xiaomi Su7",
"SN": 123456,
"isCar: true,
"Journey": "1000km"
}
注意:在上面的示例中,name就是一个属性或者是键,后面跟一个:号,xiaomi Su7 则是值,键值对必须成对出现,键值对之间需要用,隔开.
Json值主要有以下类型:
字符串:
JSON字符串必须用双引号 " 包围,而不是单引号 ',或者没有任何引号围起来.
数字:
JSON支持整数和浮点数。
布尔值:
JSON使用true和false表示布尔值。
null:
JSON使用null表示空值或缺失的值。
嵌套结构:
JSON对象可以嵌套在其他JSON对象中,形成复杂的数据结构。数组也可以包含其他JSON值,包括对象和数组。
常用的Json库
在C#中,我们可以用这几个常用的JSON解析库来处理JSON数据;
Json.NET (Newtonsoft.Json)
Json.NET(也称为Newtonsoft.Json)是C#中最常用的JSON解析库,广泛用于处理JSON数据。
{
"Students":[
{"FirstName":"Jim","LastName":"Green","IsHigh":true},
{"FirstName":"Li","LastName":"Wang","IsHigh":false},
{"FirstName":"Li123","LastName":"Wang123","IsHigh":false}
]
}
{"FirstName":"Jim","LastName":"Green","IsHigh":true},表示一个对象
[]内表示一个数组,数组名称是“Students”.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace _68.myJSON
{
class Program
{
static void Main(string[] args)
{
//Reference .Net JSON
//using Newtonsoft.Json;
//序列化数据,生成JSON文件
var o1 = new Person { Name = "David", Age = 29, ID = 001 };
var o2 = new Person { Name = "lily", Age = 25, ID = 002 };
var o3 = new Person { Name = "Lucy", Age = 28, ID = 003 };
var o4 = new Person { Name = "Jim", Age = 30, ID = 004 };
var o5 = new Person { Name = "Steve", Age = 27, ID = 005 };
Object[] objects = { o1, o2, o3, o4, o5 };
string str_JSON = JsonConvert.SerializeObject(objects,Formatting.Indented);
File.WriteAllText(@"D:\MyDatas.json", str_JSON);
//解析JSON文件,反序列化操作,JSON数据是数组,元素是Person,所以反序列化操作的泛型类型参数是List<Person>,返回List<Person>
List<Person> people = JsonConvert.DeserializeObject<List<Person>>(File.ReadAllText("D:\\MyDatas.json"));
foreach (var item in people)
{
Console.WriteLine($"{item.Name},{item.Age},{item.ID}");
}
Console.ReadKey();
}
}
public class Person
{
public string Name { get; set; }
public int ID { get; set; }
public int Age { get; set; }
}
}
如上例,将5个Person对象组成的数组作为数据序列化成一个Json格式的文本文件,如下:
[
{
"Name": "David",
"ID": 1,
"Age": 29
},
{
"Name": "lily",
"ID": 2,
"Age": 25
},
{
"Name": "Lucy",
"ID": 3,
"Age": 28
},
{
"Name": "Jim",
"ID": 4,
"Age": 30
},
{
"Name": "Steve",
"ID": 5,
"Age": 27
}
]
然后我们呢通过泛型反序列化函数DeserializeObject<List<Person> >,将Json格式的文本文件转换成List<Person> 对象,循环得到的集合数据如下: