.net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken

  • 在VB.NET中,您可以使用Newtonsoft.Json程序包来处理JSON数据。为了方便获取多级JSON数据,您可以使用JObject类的SelectToken方法。以下是一个示例代码:

    Imports Newtonsoft.Json
    Imports Newtonsoft.Json.LinqPublic Sub Main()Dim jsonString As String = "{ 'a': 'abcd', 'b': 3333, 'c': [11, 22, 33], 'd': { 'd1': 'ddddd', 'd2': 'dddd2', 'd3': [11, 22, 33, 44, { 'd3str': 'd3d3d3', 'd3obj': { 'd3a': '33a', 'd3b': 'bbbbb' } }] } }"Dim jsonObject As JObject = JObject.Parse(jsonString)Dim d1Value As String = jsonObject.SelectToken("d.d1").ToString()Console.WriteLine(d1Value)
    End Sub
    

    在上面的示例中,我们首先定义了一个JSON字符串jsonString,其中包含多级嵌套的JSON数据。

    然后,我们使用JObject.Parse方法将JSON字符串解析为JObject对象。

    接下来,我们使用SelectToken方法并传入路径字符串"d.d1"来获取d.d1的值。最后,我们使用ToString方法将值转换为字符串,并使用Console.WriteLine打印出来。

    通过使用SelectToken方法,您可以方便地获取多级JSON数据,而不需要使用多个Item方法。

  • System.Text.Json如何实现取多级JSON子数据,类似Newtonsoft.Json.SelectToken("d.d1").ToString()
  • System.Text.Json中,您可以使用JsonDocument类和JsonElement类来实现获取多级JSON子数据。以下是一个示例代码:

    Imports System.Text.JsonPublic Sub Main()Dim jsonString As String = "{ 'a': 'abcd', 'b': 3333, 'c': [11, 22, 33], 'd': { 'd1': 'ddddd', 'd2': 'dddd2', 'd3': [11, 22, 33, 44, { 'd3str': 'd3d3d3', 'd3obj': { 'd3a': '33a', 'd3b': 'bbbbb' } }] } }"Dim jsonDocument As JsonDocument = JsonDocument.Parse(jsonString)Dim d1Value As JsonElement = jsonDocument.RootElement.GetProperty("d").GetProperty("d1")Console.WriteLine(d1Value.ToString())
    End Sub
    

    在上面的示例中,我们首先定义了一个JSON字符串jsonString,其中包含多级嵌套的JSON数据。

    然后,我们使用JsonDocument.Parse方法将JSON字符串解析为JsonDocument对象。

    接下来,我们使用RootElement属性获取根元素,并使用GetProperty方法连续获取子属性。在这个例子中,我们使用GetProperty("d")获取d属性,然后再使用GetProperty("d1")获取d1属性。

    最后,我们使用ToString方法将JsonElement对象转换为字符串,并使用Console.WriteLine打印出来。

    通过使用GetProperty方法和JsonElement对象,您可以方便地获取多级JSON子数据,类似于Newtonsoft.Json中的SelectToken方法。

  • System.Text.Json需要多次GetProperty才能获取子数据:GetProperty("d").GetProperty("d1")
    是否可以直接用d.d1这种方式取JSON多级数据,还有没有其他别的JSON组件能实现这种功能
  • System.Text.Json中,没有直接提供类似d.d1这种方式来获取多级JSON数据的功能。您需要使用多次的GetProperty方法来逐级获取子属性。

    如果您希望使用类似d.d1这种方式来获取多级JSON数据,可以考虑使用其他第三方JSON组件,例如Newtonsoft.JsonNewtonsoft.Json提供了SelectToken方法,可以使用类似路径的方式来获取多级JSON数据。

    除了Newtonsoft.Json,还有其他一些第三方JSON组件也提供了类似的功能,例如Json.NETJsonCpp等。您可以根据自己的需求选择适合的JSON组件来处理多级JSON数据。请注意,使用第三方组件可能需要额外的依赖项,并且可能会影响性能和可移植性。

  •  Dim jsonString As String = "{ 'a': 'abcd', 'b': 3333, 'c': [11, 22, 33], 'd': { 'd1': 'ddddd', 'd2': 'dddd2', 'd3': [11, 22, 33, 44, { 'd3str': 'd3d3d3', 'd3obj': { 'd3a': '33a', 'd3b': 'bbbbb' } }] } }"Dim jsonDocument As JsonDocument = JsonDocument.Parse(jsonString)Dim d1Value As JsonElement = jsonDocument.RootElement.GetProperty("d").GetProperty("d1")
    如何获取D.D3[2]的值?
  • System.Text.Json中,要获取D.D3[2]的值,您需要使用多次的GetProperty方法和EnumerateArray方法来逐级获取子属性和数组元素。以下是一个示例代码:

    复制Imports System.Text.JsonPublic Sub Main()Dim jsonString As String = "{ 'a': 'abcd', 'b': 3333, 'c': [11, 22, 33], 'd': { 'd1': 'ddddd', 'd2': 'dddd2', 'd3': [11, 22, 33, 44, { 'd3str': 'd3d3d3', 'd3obj': { 'd3a': '33a', 'd3b': 'bbbbb' } }] } }"Dim jsonDocument As JsonDocument = JsonDocument.Parse(jsonString)Dim d3Value As JsonElement = jsonDocument.RootElement.GetProperty("d").GetProperty("d3")Dim d3Array As JsonArrayEnumerator = d3Value.EnumerateArray()Dim d3Element As JsonElement = NothingFor i As Integer = 0 To 2d3Array.MoveNext()d3Element = d3Array.CurrentNextConsole.WriteLine(d3Element.ToString())
    End Sub
    

    在上面的示例中,我们首先定义了一个JSON字符串jsonString,其中包含多级嵌套的JSON数据。

    然后,我们使用JsonDocument.Parse方法将JSON字符串解析为JsonDocument对象。

    接下来,我们使用GetProperty方法获取D.D3的值,并使用EnumerateArray方法获取D.D3的数组元素。

    然后,我们使用MoveNext方法和Current属性来遍历数组元素,直到达到索引为2的元素。

    最后,我们使用ToString方法将JsonElement对象转换为字符串,并使用Console.WriteLine打印出来。

    通过使用GetProperty方法、EnumerateArray方法和数组遍历,您可以获取D.D3[2]的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端常用代码整理(不断更新中)— js,jquery篇

1.随机函数代码 function getRandom(min, max) {return Math.floor(Math.random() * (max - min 1)) min}2.倒计时代码 let now new Date()// 2. 得到指定时间的时间戳let last new Date(这里写想要达到的时间)// 3. (计算剩余的毫秒数) / 1000 剩余…

【Linux】缓冲区与缓冲区的刷新策略

目录 1.缓冲区基础 1.1缓冲区的刷新策略 1.1.1三种刷新策略 1.1.2.两种强制刷新策略 2.用户级语言层缓冲区 2.1.默认在显示器输出 2.2.重定向到文件输出 2.3.write调用没有显示两份的原因 3.模拟实现文件缓冲区 3.1 myFileBuffer.h 3.2 myFileBuffer.c 4.系统内核缓…

Linux操作系统运维-Docker的基础知识梳理总结

Linux操作系统运维-Docker的基础知识梳理总结 docker用来解决不同开发人员软件调试时环境不统一的问题,保证了程序调试时运行环境的一致性。docker的设计理念便是一处镜像,处处运行,即通过产生用户软件,运行环境及其运行配置的统一…

回归预测 | Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测&#x…

[C++] sqlite3_get_table 的使用

不知道为啥 sqlite3 里面使用 “UPDATE” 更新数据,更新失败也不报错,所以就想绕过去。先查一下字段存在不存在,然后再update std::string selectsql "SELECT COUNT(*) FROM table_name WHERE some_condition"; char** dbResult;…

Linux下centos操作系统安装Mysql8.0过程及踩坑填补

我自己有一台服务器,之前安装的是MySQL5.5,现在我想升级为MySQL8.0,于是我干了以下操作,既有踩坑又有干货: 1.先卸载MySQL; 2.删除跟MySQL相关文件; 3.安装新的MySQL8.0版本(这里踩了一个坑&…

Spring- FactoryBean接口中的getObject()方法

目录 一、Spring框架介绍 二、FactoryBean接口是什么 三、getObject()方法如何使用 一、Spring框架介绍 Spring框架是一个轻量级的、非侵入式的Java企业级应用开发框架,以IoC(控制反转)和AOP(面向切面编程)为核心思…

springboot集成easypoi导出多sheet页

pom文件 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.0</version> </dependency> 导出模板&#xff1a; 后端代码示例&#xff1a; /*** 导出加油卡进便利店大额审批列…

网站后端开发 thinkphp6 入门教程合集(更新中)

thinkphp6 入门&#xff08;1&#xff09;--安装、路由规则、多应用模式 thinkphp6 入门&#xff08;1&#xff09;--安装、路由规则、多应用模式_软件工程小施同学的博客-CSDN博客 thinkphp6 入门&#xff08;2&#xff09;--视图、渲染html页面、赋值 thinkphp6 入门&#x…

云计算 - 弹性计算技术全解与实践

一、引言 在过去的十年里&#xff0c;云计算从一个前沿概念发展为企业和开发者的必备工具。传统的计算模型通常局限于单一的、物理的位置和有限的资源&#xff0c;而云计算则通过分布式的资源和服务&#xff0c;为计算能力带来了前所未有的"弹性"。 弹性&#xff1a;…

axios get 请求 url 转码 空格转成+,导致请求失败(前端解决)

问题 GET 请求参数&#xff1a; URL-encoded 后&#xff1a; 浏览器将空格转成了&#xff0c;导致服务报错&#xff0c;返回 400。 解决 在请求拦截器中&#xff0c;对 params 进行处理。 axios.interceptors.request.use((config) > {let url config.url;if (config…

ES监控方法以及核心指标

文章目录 1. 监控指标采集1.1 部署elasticsearch_exporter1.2 prometheus采集elasticsearch_exporter的暴露指标1.3 promethues配置告警规则或者配置grafana大盘 2. 核心告警指标2.1 es核心指标2.2 es容量模型建议 3. 参考文章 探讨es的监控数据采集方式以及需要关注的核心指标…

python-自动化篇-办公-一键将word中的表格提取到excel文件中

文章目录 代码 工作中&#xff0c;经常需要将Word文档中的表格粘贴到Excel文件中&#xff0c;以便汇总及分析。一个一个复制粘贴&#xff0c;非常不方便&#xff0c;还是Python自动化操作&#xff0c;省心省力。要求如下图所示&#xff0c;即将word中的所有表格&#xff0c;转存…

闲聊电脑(6)装个 Windows(二)

闲聊电脑&#xff08;6&#xff09;装个 Windows&#xff08;二&#xff09; 夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;上次说的镜像文件到底长啥样…

VMware虚拟机安装openEuler系统(一)(2024)

目录 一、下载ISO镜像 二、开始创建虚拟机 通过实践是学习openEuler开源Linux系统的最佳方式。因此我们首先得搭建一个openEuler实战环境&#xff0c;文章是在Windows系统上使用VMware Workstation虚拟化软件&#xff0c;安装和学习openEuler开源Linux操作系统。 使用虚拟机…

Android 判断通知是进度条通知

1.需求: 应用监听安卓系统中的通知,需要区分出带进度条的通知. 当使用NotificationCompat.Builder构建一个通知时&#xff0c;可以通过调用setProgress(max, progress, indeterminate)方法来添加一个进度条。这里的max参数表示最大进度值&#xff0c;progress表示当前进度值&a…

【wu-lazy-cloud-network】Java自动化内网穿透

项目介绍 wu-lazy-cloud-network 是一款基于&#xff08;wu-framework-parent&#xff09;孵化出的项目&#xff0c;内部使用Lazy ORM操作数据库&#xff0c;主要功能是网络穿透&#xff0c;对于没有公网IP的服务进行公网IP映射 使用环境JDK17 Spring Boot 3.0.2 功能 1.内网…

算法day12

算法day12 二叉树理论基础114 二叉树的前序遍历145 二叉树的后序遍历94 二叉树的中序遍历迭代法 二叉树理论基础 直接看代码随想录就完事了&#xff0c;之前考研也学过&#xff0c;大概都能理解 我这里就说说代码层面的。 二叉树的存储&#xff1a; 1、链式存储&#xff1a;这…

基础面试题整理6之Redis

1.Redis的应用场景 Redis支持类型&#xff1a;String、hash、set、zset、list String类型 hash类型 set类型 zset类型 list类型 一般用作缓存&#xff0c;例如 如何同时操作同一功能 2.redis是单线程 Redis服务端(数据操作)是单线程&#xff0c;所以Redis是并发安全的,因…

Mysql MGR搭建

一、架构说明 1.1 架构概述 MGR(单主)VIP架构是一种分布式数据库架构&#xff0c;其中数据库系统采用单主复制模式&#xff0c; 同时引入虚拟IP(VIP)来提高可用性和可扩展性。 这种架构结合了传统主从复制和虚拟IP技术的优势&#xff0c;为数据库系统提供了高可用、 高性能和…