C#学习之读取并修改JSON文件

本博客是自己记录学习所用。
学习内容
一、了解什么JSON文件
二、如何使用C#读取

一、什么是JSON文件
JSON网站:https://www.json.org/json-en.html
本文参考的是菜鸟教程中的介绍
链接:https://www.runoob.com/json/json-tutorial.html
1、它是啥?
JSON全程为JavaScript Object Notation,一看就知道是Java搞的一个数据格式。官方说法是一种轻量级的数据交换格式。

2、它长啥样?
菜鸟教程里提供的JSON实例图片:
C#学习之读取并修改JSON文件_第1张图片

3、它咋读?
JSON文件可以直接使用记事本读取。
顾名思义,JSON里面包含的都是一些数据,使用不同的数据类型进行保存。

数据在名称/值对中
数据由逗号分隔
大括号 {} 保存对象
中括号 [] 保存数组,数组可以包含多个对象

一些实例
数据很好懂,大括号就很像python语言里面所说的字典。
C#学习之读取并修改JSON文件_第2张图片
像这个文件,最开始是个大括号,那么说明是个字典,字典里面有个关键字sites,sites里面有个中括号即数组,数组保存三个字典,每个字典里面有name和url两个名称,分别指的是网站名字和网址。

不同的类型有不同的读取方法
在此之前,有必要解释几个基本概念:

json字符串,就是string,它一定是由双引号包起来的,如"{‘name’:‘jerry’}"。这是一个string,尽管去掉双引号后它就是一个json对象。

json对象,就是以大括号开头的对象,如{“name”:“jerry”}; 而获取name值的方式就是 json.name 或者 json[“name”];

json数组,就是以中括号开头的json对象数组,如[{“name”:“tom”},{“name”:“jerry”}];获取值的方式是 json[0].name 或 json[0][“name”]; //这里取第一个name

4、总结:
感觉JSON就是一个用类似python字典类型进行不断嵌套的一个数据,里面可以包含数值、字符、字符串、数组、字典等等。

二、如何使用C#读取和修改
本次使用的编辑器是VS2022版本。

设计的操作界面
C#学习之读取并修改JSON文件_第3张图片

代码部分:
首先引用库

using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

先定义一个跟Json文件一样的类用于存储数据。

public class DATA
        {
            public string id { get; set; }
            public int dev_type { get; set; }
            public double mmpx { get; set; }
            public int line { get; set; }

        }

左上角的按钮内容,输入文件地址。

private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();      //声明打开文件
            ofd.Title = "请选择打开的文件";
            ofd.Filter = "json文件(*.json)|*.json";
            if (ofd.ShowDialog() == DialogResult.OK)  //窗体打开成功
            {
                textBox1.Text = ofd.FileName;  //获取或设置用户选定的路径

            }
        }

查看按钮部分

 public void jiexi_click(object sender, EventArgs e)
        {
            //string json = "[ { 'id':'AAA', 'dev_type':2, 'mmpx':1.2, 'line':0 }, { 'id':'BBB', 'dev_type':3, 'mmpx':2.2, 'line':1 } ]";
            //List datas = JsonConvert.DeserializeObject>(json); //用List作为容器装Person数组
            //如何使用e.g:datas[0].id

            string data = File.ReadAllText(textBox1.Text);

            int num = int.Parse(input_num.Text);
            List<DATA> parameters = JsonConvert.DeserializeObject<List<DATA>>(data);

            value1.Text = parameters[num].id;
            value2.Text = parameters[num].dev_type.ToString();
            value3.Text = parameters[num].mmpx.ToString();
            value4.Text = parameters[num].line.ToString();

        }

保存地址按钮

        private void save_adress_click(object sender, EventArgs e)
        {
            FolderBrowserDialog fd = new FolderBrowserDialog();
            if (fd.ShowDialog() == DialogResult.OK)
            {
                aim_location.Text = fd.SelectedPath;//选择地址
                aim_location.Text = String.Concat(aim_location.Text, "\\converted.json");
            }
        }

保存按钮地址

        private void Change_cilck(object sender, EventArgs e)
        {
            string data = File.ReadAllText(textBox1.Text);

            int num = int.Parse(input_num.Text);
            List<DATA> parameters = JsonConvert.DeserializeObject<List<DATA>>(data);

            parameters[num].id = value1.Text;
            parameters[num].dev_type = int.Parse(value2.Text);
            parameters[num].mmpx = double.Parse(value3.Text);
            parameters[num].line = int.Parse(value4.Text);

            File.WriteAllText(aim_location.Text, JsonConvert.SerializeObject(parameters));

            MessageBox.Show("修改保存完成!");
        }

总结:
本次实验由于时间比较仓促,还是有很多部分没有完成,并且完全没有泛化能力。但是能够提供一个大概的结构,经供参考。

你可能感兴趣的:(c#)