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

相关文章

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep