您当前的位置: 首页 > 技术文章 > 前端开发

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

作者: 时间:2023-05-20阅读数:人阅读

本博客是自己记录学习所用。
学习内容
一、了解什么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实例图片:
菜鸟教程

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

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

一些实例
数据很好懂,大括号就很像python语言里面所说的字典。
在这里插入图片描述
像这个文件,最开始是个大括号,那么说明是个字典,字典里面有个关键字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版本。

设计的操作界面
在这里插入图片描述

代码部分:
首先引用库

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<DATA> datas = JsonConvert.DeserializeObject<List<DATA>>(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("修改保存完成!");
        }

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

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:licqi@yunshuaiweb.com

加载中~
如果您对我们的成果表示认同并且觉得对你有所帮助可以给我们捐赠。您的帮助是对我们最大的支持和动力!
捐赠我们
扫码支持 扫码支持
扫码捐赠,你说多少就多少
2
5
10
20
50
自定义
您当前余额:元
支付宝
微信
余额

打开支付宝扫一扫,即可进行扫码捐赠哦

打开微信扫一扫,即可进行扫码捐赠哦

打开QQ钱包扫一扫,即可进行扫码捐赠哦