C# Newtonsoft.Json解析json笔记

2024-01-31 20:04

本文主要是介绍C# Newtonsoft.Json解析json笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在做数据传报的工作,有解析一个巨复杂的json的需求,所以又学了下 Newtonsoft.Json,感觉挺方便的。

参考思路如下:
1、对象的格式为 名称:值。其中,值可以为对象(大括号),也可以为对象数组(中括号),当然更可以简单粗暴的就是文本/数值。对象允许包含子对象。
2、最外层的一对大括号即代表整个json,可以首先用反序列化函数转化为JObject对象,并将其视作根对象;
3、子对象的值,可按名从父对象上摘取。观察值的类型,如果值还是对象则转成JObject;如果是对象数组则转成JAarry(然后对数组中的每个对象分别操作);如果就是最终值,直接ToString。对对象或对象数组直接应用ToString则会得到对应的json文本。(若有必要可以重新parse这个文本为json对象。)

先看个最简单的例子,只有几个并列存在的键值对:
{
    "文件名":"/home/pi/a.jpg",
    "字节数":"123KB"
}

 示例代码(简单起见,忽略了错误处理和对象是否为空的判断。实际使用中建议加上):

string jsonText = "{\"文件名\":\"/home/pi/Pictures/a.jpg\",\"字节数\":\"123KB\"}";// 解析整段文字作为根对象
JObject jObjRoot = (JObject)JsonConvert.DeserializeObject(jsonText);Console.WriteLine("===== DEMO 1 ====");
// 从根对象中摘取相应名字,直接显示值
Console.WriteLine(jObjRoot["文件名"].ToString());
Console.WriteLine(jObjRoot["字节数"].ToString());
Console.WriteLine();

输出:
=====【DEMO 1】=====
/home/pi/Pictures/a.jpg
123KB

稍微复杂一点的例子,近似于一种主-从结构:
 {
    "总览":{
        "文件名":"/home/pi/Pictures/a.jpg",
        "字节数":"123KB"
    },
    "EXIF":[
        {"项目":"X 分辨率","值":"2048"},
        {"项目":"Y 分辨率","值":"1536"},
        {"项目":"ISO","值":"100"},
        {"项目":"焦距","值":"55mm"},
        {"项目":"快门速度","值":"1/500"},
        {"项目":"光圈","值":"f/5.6"}
    ]
}

 示例代码:


string jsonText = @"{""总览"":{""文件名"":""/home/pi/Pictures/a.jpg"",""字节数"":""123KB"",},""EXIF"":[{""项目"":""X 分辨率"",""值"":""2048""},{""项目"":""Y 分辨率"",""值"":""1536""},{""项目"":""ISO"",""值"":""100""},{""项目"":""焦距"",""值"":""55mm""},{""项目"":""快门速度"",""值"":""1/500""},{""项目"":""光圈"",""值"":""f/5.6""},]
}";// 解析整段文字作为根对象
JObject jObjRoot = (JObject)JsonConvert.DeserializeObject(jsonText);
Console.WriteLine("=====【DEMO 2】=====");// 摘取名为“总览”的节点作为子对象
JObject jObjSummary = (JObject)jObjRoot["总览"];
// 从该子对象中摘取文件名和字节数并显示对应的值
Console.WriteLine(jObjSummary["文件名"].ToString());
Console.WriteLine(jObjSummary["字节数"].ToString());// 摘取名为“EXIF”的节点作为子对象数组(因包含[])
JArray jArrExif = (JArray)jObjRoot["EXIF"];
foreach(JObject jObjExif in jArrExif)
{// 对数组中的每个对象摘取其“项目”和“值”并显示对应的值Console.WriteLine(String.Format("项目:{0} - {1}", jObjExif["项目"].ToString(), jObjExif["值"].ToString()));
}Console.WriteLine();

输出:

=====【DEMO 2】=====
/home/pi/Pictures/a.jpg
123KB
项目:X 分辨率 - 2048
项目:Y 分辨率 - 1536
项目:ISO - 100
项目:焦距 - 55mm
项目:快门速度 - 1/500
项目:光圈 - f/5.6

差不多就是这个套路吧。再多层的话,继续一层层慢慢扒吧。

这篇关于C# Newtonsoft.Json解析json笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/664910

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

C#中的 StreamReader/StreamWriter 使用示例详解

《C#中的StreamReader/StreamWriter使用示例详解》在C#开发中,StreamReader和StreamWriter是处理文本文件的核心类,属于System.IO命名空间,本... 目录前言一、什么是 StreamReader 和 StreamWriter?1. 定义2. 特点3. 用

python dict转换成json格式的实现

《pythondict转换成json格式的实现》本文主要介绍了pythondict转换成json格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 一开始你变成字典格式data = [ { 'a' : 1, 'b' : 2, 'c编程' : 3,

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的