当前位置: 首页 > news >正文

C#解析JSON

https://blog.csdn.net/weixin_43046974/article/details/131449900

C#解析JSON
  • 1. JSON定义
  • 2. JSON一般构成及解析方法
  • 3. 解析举例子
    • 1. JSON对象解析,只包含一层对象{}
    • 2. 嵌套JSON对象解析,包含多层对象{}
    • 3. JSON数组解析1(数组循环遍历)
    • 4. JSON数组解析2(使用index获取数据,index从0开始计算)
    • 5. JSON 对象中的数组,一层对象{}中包含数组[]
    • 6. 嵌套 JSON 对象中的数组,多层对象{}包含数组[]

1. JSON定义

全称“JavaScript Object Notation(JavaScript对象表示法)”,JSON 是存储和交换文本信息的语法。

举例:

[{"id": 2,"name": "星河爆破","number": 999},{"id": 3,"name": "九星连珠","number": 9},{"id": 4,"name": "一语成谶","number": 999}
]

学习JSON基础教程:学习JSON基础教程
在线JSON解析及格式化验证网站:在线JSON解析及格式化验证网站

2. JSON一般构成及解析方法

JSON序列化与反序列化

JSON序列化:将对象转换成JSON 字符串
JSON反序列化:将JSON 字符串转换成对象

JSON结构(2种)
(1)对象结构:{}

{key1:value1,key2:value2...}
key的数据类型:字符串value的数据类型:字符串、数值、null、json数组[]、json对象{}

(2)数组结构:[]

JSON数组结构:[value1,value2......]
value的数据类型:字符串、数值、null、json数组[]、json对象{}

C#代码解析JSON
可使用Visual Studio调试代码,使用C#中的Newtonsoft库来解析JSON,添加引用

using Newtonsoft.Json
using Newtonsoft.Json.Linq

解析规则(重要)

针对对象结构{},使用JObject解析
针对数组结构[],使用JArray解析

3. 解析举例子

1. JSON对象解析,只包含一层对象{}

JSON文本:

{"name":"张三","name_en":"zhangssan"
}

解析代码如下:

string jsonText = "{\"name\":\"张三\",\"name_en\":\"zhangssan\"}";
//解析对象JObject 
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
//获取此对象key="name"和key="name_en"的值
string zone = jo["name"].ToString();
string zone_en = jo["name_en"].ToString();
Console.WriteLine(zone);
Console.WriteLine(zone_en);

2. 嵌套JSON对象解析,包含多层对象{}

JSON文本:

{"allname":{"name":"张三","name_en":"zhangsan"}
}

解析代码如下:

string jsonText = "{\"allname\":{\"name\":\"张三\",\"name_en\":\"zhangsan\"}}";
//解析对象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
//获取此对象中key="allname"下key="name"的值
string zone = jo["allname"]["name"].ToString();
string zone_en = jo["allname"]["name_en"].ToString();
Console.WriteLine(zone);
Console.WriteLine(zone_en);

3. JSON数组解析1(数组循环遍历)

JSON文本:

[{"a":"a1","b":"b1"},{"a":"a2","b":"b2"}
]

解析代码如下:

string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]"; 
//解析数组JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);
//循环获取数组中的内容
for(int i = 0; i < jArray.Count; i++)
{//解析对象JObjectJObject j = JObject.Parse(jArray[i].ToString());//获取此对象key="a"的值string a = j["a"].ToString();Console.WriteLine(a);
}

4. JSON数组解析2(使用index获取数据,index从0开始计算)

JSON文本:

[{"a":"a1","b":"b1"},{"a":"a2","b":"b2"}
]

解析代码如下:

string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]";   
//解析数组JArray           
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);
//获取数组jArray中第1个(从第0开始计算)key="a"的值
string str = jArray[1]["a"].ToString();
Console.WriteLine(str);

5. JSON 对象中的数组,一层对象{}中包含数组[]

JSON文本:

{"name":"网站","num":3,"sites":["Google","Runoob","Taobao"]
}

解析代码如下:

string jsonText = "{\"name\":\"网站\",  \"num\":3,  \"sites\":[\"Google\",\"Runoob\",\"Taobao\"]}";
//解析对象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string sites = jo["sites"].ToString();
//解析数组JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(sites);
//获取数组sites jArray中第0个(从第0开始计算)的值
string sitesdetails = jArray[0].ToString();
Console.WriteLine(sitesdetails);

6. 嵌套 JSON 对象中的数组,多层对象{}包含数组[]

JSON文本:

{"name":"网站","num":2,"sites": [{ "name":"Google", "info":[ "Android", "Google 搜索", "Google 翻译" ] },{ "name":"Taobao", "info":[ "淘宝", "网购" ] }]
}

解析代码如下:

string jsonText = "{\"name\":\"网站\",\"num\":2,\"sites\":[{\"name\":\"Google\",\"info\":[\"Android\",\"Google搜索\",\"Google翻译\"]},{\"name\":\"Taobao\",\"info\":[\"淘宝\",\"网购\"]}]}";
//解析对象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string sites = jo["sites"].ToString();
//解析数组JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(sites);
//循环遍历sites数组
for (int i = 0; i < jArray.Count; i++)
{//解析对象JObjectJObject j = JObject.Parse(jArray[i].ToString());string info = j["info"].ToString();//解析数组JArrayJArray jArray2 = (JArray)JsonConvert.DeserializeObject(info);//循环遍历info数组for (int k = 0; k < jArray2.Count; k++){Console.WriteLine(jArray2[k]);}

相关文章:

C#解析JSON

https://blog.csdn.net/weixin_43046974/article/details/131449900 C#解析JSON 1. JSON定义2. JSON一般构成及解析方法3. 解析举例子 1. JSON对象解析&#xff0c;只包含一层对象{}2. 嵌套JSON对象解析&#xff0c;包含多层对象{}3. JSON数组解析1&#xff08;数组循环遍历&…...

AI图像识别算法助力安全生产*提升风险监测效率---豌豆云

2024年开年来安全生产事故频发&#xff0c;工厂爆炸、工程坍陷等重大安全生产事故的发生再次为我们敲响了警钟。 安全生产是企业发展的生命线&#xff0c;而传统的安全监测手段存在盲区和延迟&#xff0c;难以及时发现和应对潜在风险。 AI图像识别算法通过利用先进的计算机视…...

CSS技巧:实现两个div在同一行显示的方法

css如何让两个div在同一行显示 - web开发 - 亿速云 在Web开发中&#xff0c;经常遇到需要将多个元素水平排列在同一行的情况。其中一个常见的需求是将两个div元素放置在同一行上&#xff0c;使它们并排显示。在本文中&#xff0c;我们将介绍几种实现这一效果的CSS方法。 1. 使…...

【Unity】Node.js安装与配置环境

引言 我们在使用unity开发的时候&#xff0c;有时候会使用一些辅助工具。 Node.js就是开发中&#xff0c;经常会遇到的一款软件。 1.下载Node.js 下载地址&#xff1a;https://nodejs.org/en 2.安装Node.js ①点击直接点击Next下一步 ②把协议勾上&#xff0c;继续点击…...

Vue3:使用 Composition API 不需要 Pinia

在 Vue.js 开发的动态环境中&#xff0c;在单个组件中处理复杂的业务逻辑可能会导致笨重的文件和维护噩梦。虽然 Pinia 提供集中式状态管理&#xff0c;但仅依赖它来处理复杂的业务逻辑可能会导致代码混乱。本文探讨了使用 Composition API 的替代方法&#xff0c;说明开发人员…...

ExoPlayer 播放视频黑屏的解决方法

最近项目中在使用 ExoPlayer 来进行视频的播放&#xff0c;开发过程中遇到了部分视频打开后黑屏的问题&#xff0c;报错日志如下。 E Audio codec error android.media.MediaCodec$CodecException: Error 0xe E Playback error androidx.media3.exoplayer.ExoPlaybackExcept…...

C语言初阶—数组

数组是一组相同类型元素的集合。 在C99标准之前&#xff0c;数组的大小必须是常量或常量表达式。 在C99标准之后&#xff0c;数组的大小可以是变量&#xff0c;可以支持变长数组&#xff0c;但变长数组不能初始化。 不完全初始化&#xff0c;剩余的元素默认初始化为0 。 数组访…...

飞桨(PaddlePaddle)数据预处理教程

文章目录 飞桨&#xff08;PaddlePaddle&#xff09;数据预处理教程1. 安装飞桨2. 了解飞桨的数据预处理方法3. 应用单个数据预处理方法4. 组合多个数据预处理方法5. 在数据集中应用数据预处理5.1 在框架内置数据集中应用5.2 在自定义数据集中应用 6. 总结 飞桨&#xff08;Pad…...

MYSQL C++链接接口编程

使用MYSQL 提供的C接口来访问数据库,官网比较零碎,又不想全部精读一下,百度CSDN都是乱七八糟的,大部分不可用 官网教程地址 https://dev.mysql.com/doc/connector-cpp/1.1/en/connector-cpp-examples-connecting.html 网上之所以乱七八糟,主要是MYSQL提供了3个接口两个包,使用…...

并发编程中常见的设计模式,c++多线程如何设计

C多线程设计&#xff08;任务的“多对一”、“一对多”、“多对多”情况 该如何设计线程&#xff1f;&#xff09; C书籍中并未找到对多线程设计&#xff0c;有很完整详细的总结&#xff01;&#xff01;C并发编程书籍中也只是一些理论或则零散的多线程实例。无奈&#xff0c;…...

解决android studio build Output中文乱码

1.效果如下所示&#xff1a; 代码运行报错的时候&#xff0c;Build Output报的错误日志中中文部分出现乱码&#xff0c;导致看不到到底报的什么错。 2.解决办法如下&#xff1a; 点击Android studio开发工具栏的Help-Edit Custom VM Options....&#xff0c;Android studio会…...

[云原生] K8s之pod进阶

一、pod的状态说明 &#xff08;1&#xff09;Pod 一直处于Pending状态 Pending状态意味着Pod的YAML文件已经提交给Kubernetes&#xff0c;API对象已经被创建并保存在Etcd当中。但是&#xff0c;这个Pod里有些容器因为某种原因而不能被顺利创建。比如&#xff0c;调度不成功(…...

[Unity3d] 网络开发基础【个人复习笔记/有不足之处欢迎斧正/侵删】

TCP/IP TCP/IP协议是一 系列规则(协议)的统称&#xff0c;他们定义了消息在网络间进行传输的规则 是供已连接互联网的设备进行通信的通信规则 OSI模型只是一个基本概念,而TCP/IP协议是基于这个概念的具体实现 TCP和UDP协议 TCP:传输控制协议&#xff0c;面向连接&#xff0c…...

Tomcat的配置文件

Tomcat的配置文件详解 一.Tomcat的配置文件 Tomcat的配置文件默认存放在$CATALINA_HOME/conf目录中&#xff0c;主要有以下几个&#xff1a; 1.server.xml: Tomcat的主配置文件&#xff0c;包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息&#x…...

猴子吃桃问题(python版)

文章预览&#xff1a; 题目python解法一&#xff1a;运行结果 python解法二&#xff1a;运行结果 python解法三&#xff1a;运行结果 题目 猴子吃桃问题&#xff1a;猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不过瘾&#xff0c;又多吃了一个。 第二天早…...

C语言入门到精通之练习49:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的 *。

题目&#xff1a;读取7个数&#xff08;1—50&#xff09;的整数值&#xff0c;每读取一个值&#xff0c;程序打印出该值个数的 &#xff0a;。 程序分析&#xff1a;无。 实例 #include<stdio.h> #include<stdlib.h> int main() {int n,i,j;printf("请输入…...

如何在Windows轻量应用服务器上安装和配置SSH?

如何在Windows轻量应用服务器上安装和配置SSH&#xff1f; 检查OpenSSH的可用性&#xff1a;首先&#xff0c;需要以管理员身份打开PowerShell并运行命令Get-WindowsCapability - Online | Where-Object Name - like OpenSSH*来检查OpenSSH服务是否可用。如果服务未启动或不可…...

leetcode日记(36)全排列

想思路想了很久……思路对了应该会很好做。 我的思路是这样的&#xff1a;只变化前n个数字&#xff0c;不断增加n&#xff0c;由2到nums.size()&#xff0c;使用递归直到得到所有结果 代码如下&#xff1a; class Solution { public:vector<vector<int>> permut…...

Flink:动态表 / 时态表 / 版本表 / 普通表 概念区别澄清

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…...

异常网络下TCP的可靠服务机制(慢启动、拥塞避免、快重传、快恢复)

目录 TCP超时重传拥塞控制概述慢启动和拥塞避免下面讲解发送端如何判断拥塞发生。 快速重传和快速恢复 本文描述TCP在异常网络下的处理方式 以保证其可靠的数据传输的服务 TCP超时重传 tcp服务能够重传其超时时间内没有收到确认的TCP报文段&#xff0c;tcp模块为每一个报文段都…...

3分钟学会洛雪音乐音源配置:免费获取全网高品质音乐的终极指南

3分钟学会洛雪音乐音源配置&#xff1a;免费获取全网高品质音乐的终极指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 还在为找不到高质量免费音乐资源而烦恼吗&#xff1f;lxmusic-项目为你提…...

从开发者反馈看taotoken api密钥管理与访问控制功能的实用性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 从开发者反馈看taotoken api密钥管理与访问控制功能的实用性 在构建基于大模型的应用时&#xff0c;API密钥的管理与访问控制是保障…...

深度学习实验十大模式与反模式:工业级可复现性实战指南

1. 项目概述&#xff1a;为什么这十个模式与反模式值得你花一整周反复咀嚼 “Ten Patterns and Antipatterns of Deep Learning Experimentation”——这个标题乍看像一篇学术综述&#xff0c;但在我带过27个工业级AI项目、亲手调试过412次模型训练失败日志、在三个不同行业的M…...

【电脑端】实用又轻巧!极致小巧关机工具,让电脑管理更省心!电脑定时自动关机工具

前言 有很多小伙伴经常用电脑挂游戏或者自动执行任务&#xff0c;但又不想让电脑一直开机&#xff0c;今天就给大家推荐几款电脑自动关机软件&#xff0c;可以到时间强制关机&#xff01; 软件获取地址 免费电脑关机工具 第一款&#xff1a;迷你关机 这款迷你关机凭 9KB 超…...

3分钟学会:免费歌词制作工具让你轻松成为音乐剪辑高手 [特殊字符]

3分钟学会&#xff1a;免费歌词制作工具让你轻松成为音乐剪辑高手 &#x1f3b5; 【免费下载链接】lrc-maker 歌词滚动姬&#xff5c;可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 你是否曾经想为自己喜欢的歌曲制作…...

终极指南:如何用PHP轻松实现网页截图与PDF生成

终极指南&#xff1a;如何用PHP轻松实现网页截图与PDF生成 【免费下载链接】browsershot Convert HTML to an image, PDF or string 项目地址: https://gitcode.com/gh_mirrors/br/browsershot 你是否曾经遇到过这样的困境&#xff1a;需要在PHP应用中生成网页截图&…...

告别串口调试烦恼:用MAX3221EUE+芯片搞定TTL转RS232的完整电路与PCB布局指南

告别串口调试烦恼&#xff1a;用MAX3221EUE芯片搞定TTL转RS232的完整电路与PCB布局指南 在嵌入式开发中&#xff0c;与老式工控设备或带DB9接口的PC通信时&#xff0c;TTL与RS232之间的电平转换是个绕不开的坎。不少开发者都遇到过这样的场景&#xff1a;代码调试一切正常&…...

FlashAttention 为什么对序列长度这么“敏感”?

FlashAttention 为什么对序列长度这么“敏感”&#xff1f; 很多朋友在昇腾 NPU 上测 FlashAttention 性能时&#xff0c;都会遇到一个让人挠头的现象&#xff1a;为什么 seq_len512 时&#xff0c;FlashAttention 比标准 Attention 还慢&#xff1f;非要等到 seq_len2048 才开…...

极速净化Windows 11:Win11Debloat一键释放系统潜能

极速净化Windows 11&#xff1a;Win11Debloat一键释放系统潜能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and custo…...

2026电动车趋势:智驾与电池深度融合

2026年电动汽车&#xff08;EV&#xff09;发展趋势全景分析 2026年的全球电动汽车产业将迈入一个技术加速融合、市场竞争白热化与商业模式深度创新的关键阶段。其发展趋势可解构为核心技术突破、市场格局演变、供应链重塑及政策生态协同四个维度。以下结合具体数据、案例和技…...