IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> C#学习之读取并修改JSON文件 -> 正文阅读

[大数据]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实例图片:
菜鸟教程

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("修改保存完成!");
        }

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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:37:48  更:2022-03-24 00:41:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:56:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码