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

C#解析Json

第一、解析JSON数据

工具:Newtonsoft.Json 类库/dll

目前我用到解析json数据的就只用到这个类库,用这个类库可以很方便的对于C#和JSON直接进行序列化和反序列化解析

首先我在本地文本文件txt复制了网上一段写好的json数据如下图(该txt文件路径是保存在d盘中):

好了,接下来我们就来解析这个txt文本格式的json数据吧!为了好演示我就直接新建一个控制台代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;
using Newtonsoft.Json.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            JsonSerializer serializer = new JsonSerializer();
            using (StreamReader reader=new StreamReader(@"d:\json.txt"))
            using (JsonReader jsreader=new JsonTextReader(reader)) 
            {
                JObject jo = (JObject)serializer.Deserialize(jsreader);//对于json的反序列化再转化为JObject
                Console.WriteLine(jo.ToString());
            }
            Console.Read();
            
        }
    }
}

运行结果:

二、Linq To Json

linq to json的主要类:

1.JObejct :用于操作json的对象

2.JArray: 用来操作json数组

3.JValue :数组中的值

4.JProperty: json对象的属性,通常以key和value类似于字典形式存在

5.JToken :用于存放linq查询的结果值

下面稍微演示下用法,用JObejct创建json数据并且输出代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;
using Newtonsoft.Json.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            JObject jo = new JObject();
            jo.Add(new JProperty("name", "张惠妹"));
            jo.Add(new JProperty("sex", ""));
            jo.Add(new JProperty("age", "32"));
            jo.Add(new JProperty("teachar", new JObject(new JProperty("name", "张雨生"), new JProperty("sex", ""), new JProperty("age", "30"))));
            Console.WriteLine(jo.ToString());
            Console.ReadLine();
            
        }
    }
}

在这个基础上代码再改下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;
using Newtonsoft.Json.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            JObject jo = new JObject();
            jo.Add(new JProperty("name", "张惠妹"));
            jo.Add(new JProperty("sex", ""));
            jo.Add(new JProperty("age", "32"));
            jo.Add(new JProperty("teachar", new JObject(new JProperty("name", "张雨生"), new JProperty("sex", ""), new JProperty("age", "30"))));
            JToken Tteacher = jo["teachar"];
            Console.WriteLine(Tteacher.ToString());
            Console.ReadLine();
            
        }
    }
}

由此可以知道JToken返回的其实是对应key的value部分,再来用linq to json,首先准备一字符串,用linq 查询王力宏的朋友的名字:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;
using Newtonsoft.Json.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

           string jsonstr= "{\"Name\" : \"王力宏\", \"Age\" : 34, \"friends\" : [{\"Name\" : \"林俊杰\" , \"Age\":30},{\"Name\" : \"张惠妹\",\"Age\":29}] }";
            JObject jo = JObject.Parse(jsonstr);
            var a = from b in jo["friends"].Children()
                    select (string) b["Name"];
            foreach (var item in a)
            {
                Console.WriteLine(item);
            }
            Console.Read();
        }
    }
}

简单地对于Json的解析就介绍到这里了。。。有什么不对的地方或者需要改正的地方请大牛们指正

 

转载于:https://www.cnblogs.com/ryzen/p/8529915.html

相关文章:

  • Integer值判断是否相等问题
  • EntityFramework Core 2.0 Explicitly Compiled Query(显式编译查询)
  • C语言数组的概念
  • shell中获取当前目录
  • kali使用Fluxion钓鱼WiFi
  • python url中文转码
  • 【网摘】将图片地址直接 转为 base64
  • Git Submodule使用完整教程
  • linux 扩展根分区
  • ES6通过WeakMap解决内存泄漏问题
  • 【转载】Relief 特征选择算法简单介绍
  • mysql deadlock
  • 错误 ORA-01102: cannot mount database in EXCLUSIVE mode 的处理方法
  • 组件
  • 关于 centos中忘记数据库root密码的解决方法。
  • 翻译:Hystrix - How To Use
  • 给初学者:JavaScript 中数组操作注意点
  • 关于springcloud Gateway中的限流
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何解决微信端直接跳WAP端
  • 转载:[译] 内容加速黑科技趣谈
  • AI算硅基生命吗,为什么?
  • 阿里云服务器购买完整流程
  • 带你开发类似Pokemon Go的AR游戏
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 昨天1024程序员节,我故意写了个死循环~
  • #、%和$符号在OGNL表达式中经常出现
  • #1015 : KMP算法
  • #Z2294. 打印树的直径
  • (4)STL算法之比较
  • (4)事件处理——(7)简单事件(Simple events)
  • (day 12)JavaScript学习笔记(数组3)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (ZT)一个美国文科博士的YardLife
  • (层次遍历)104. 二叉树的最大深度
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (一)Thymeleaf用法——Thymeleaf简介
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .net 设置默认首页
  • .NET连接MongoDB数据库实例教程
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .NET运行机制
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [ARM]ldr 和 adr 伪指令的区别
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [halcon案例2] 足球场的提取和射影变换
  • [Hibernate] - Fetching strategies
  • [javaSE] 数据结构(二叉查找树-插入节点)
  • [Latex] Riemann 问题中的激波,接触间断,膨胀波的 Tikz 绘图
  • [leetcode]_String to Integer (atoi)
  • [mysql]游标和触发器