当前位置:首页 > 代码相关 > 正文内容

C#解析JSON

admin4个月前 (01-18)代码相关112

首先使用nuget搜索json,如下图选择第一个包安装。

jsonnuget.jpg

然后引用命名空间 using Newtonsoft.Json;

以下面的JSON文件为例子解析:

{"page":1,"results":

[

 {

   "adult":false,

   "backdrop_path":"/k7h4RNAarfOrF2r2YMN0P2FQSr4.jpg",

   "genre_ids":[80,18,53,28],

   "id":75780,

   "original_language":"en",

   "original_title":"Jack Reacher",

   "overview":"  根据“英国惊悚小说天王”李查德的小说《完美嫌犯》改编。\r 六发子弹,五名死者,神秘枪手在闹市区制造了一起惨案让整个城市都陷入魁了恐慌。所有的证据都指向了前军队狙击手詹姆斯·巴尔(约瑟夫·斯科拉 Joseph Sikora 饰)。但他坚持自己的清白并要求把老相识 杰克·理查尔(汤姆·克鲁斯 Tom Cruise 饰)找来,两人曾同在军队中服役。随着杰克调查的深入,他发现了更大的谜团,炮制这场惨案的真凶似乎另有其人,而别有用心的幕后黑手抓走了巴尔 ,只留下杰克一人探明真相。\r   六发子弹中有一发漏空的子弹是杀手故意放空的。为了了解狙击手的工作,杰克特意来到了狙击手的训练营找到了一个叫做萨缪尔·卡什(罗伯特·杜瓦尔 Robert Duvall 饰)的教练。在卡什和巴尔妹妹以及律师的帮助下,杰克渐渐走进了事件的中心位置,一个关于苏联改造营和俄罗斯黑帮的秘密也慢慢浮出水面……",

   "popularity":24.634,

   "poster_path":"/jJX1yrIvT9cmvKb6vcoGiRdPxbD.jpg",

   "release_date":"2012-12-20","title":"侠探杰克",

   "video":false,

   "vote_average":6.5,

   "vote_count":5030

  },

  {

   "adult":false,

   "backdrop_path":"/ww1eIoywghjoMzRLRIcbJLuKnJH.jpg",

   "genre_ids":[28],

   "id":343611,

   "original_language":"en",

   "original_title":"Jack Reacher: Never Go Back",

   "overview":"  续集故事继续围绕杰克展开。他重回弗吉尼亚州的军事基地和苏珊·特纳少校会面,要解决一些个人问题。此时,特纳却意外被捕。杰克同时也陷入谜团,因为他被诬告犯有重罪,而且牵涉到一个自己完全不知道的小孩。这些,杰克都记不起来了。他要客服重重困难,去寻找特纳,最终解决问题。",

   "popularity":24.533,

   "poster_path":"/wxLUQ1pIms3HAlVGYvEG9zg2kDs.jpg",

   "release_date":"2016-10-19",

   "title":"侠探杰克:永不回头",

   "video":false,

   "vote_average":5.7,

   "vote_count":3419

  }

],

"total_pages":1,

"total_results":2

}


可以通过在线工具生成C#实体,例如下面这个网站:

https://www.sojson.com/json2csharp.html

生成的实体如下:

public class ResultsItem
{
    /// <summary>
    /// 
    /// </summary>
    public string adult { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string backdrop_path { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public List <int > genre_ids { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int id { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string original_language { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string original_title { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string overview { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public double popularity { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string poster_path { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string release_date { get; set; }
    /// <summary>
    /// 侠探杰克
    /// </summary>
    public string title { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string video { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public double vote_average { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int vote_count { get; set; }
}
 
public class Root
{
    /// <summary>
    /// 
    /// </summary>
    public int page { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public List <ResultsItem > results { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int total_pages { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int total_results { get; set; }
}

将上面的类复制到自己的程序中,main函数中可以下面这样简单使用:

string jsonText = "{\"page\":1,\"results\":[{\"adult\":false,\"backdrop_path\":\"/k7h4RNAarfOrF2r2YMN0P2FQSr4.jpg\",\"genre_ids\":[80,18,53,28],\"id\":75780,\"original_language\":\"en\",\"original_title\":\"Jack Reacher\",\"overview\":\"  根据“英国惊悚小说天王”李查德的小说《完美嫌犯》改编。\\r 六发子弹,五名死者,神秘枪手在闹市区制造了一起惨案让整个城市都陷入魁了恐慌。所有的证据都指向了前军队狙击手詹姆斯·巴尔(约瑟夫·斯科拉 Joseph Sikora 饰)。但他坚持自己的清白并要求把老相识 杰克·理查尔(汤姆·克鲁斯 Tom Cruise 饰)找来,两人曾同在军队中服役。随着杰克调查的深入,他发现了更大的谜团,炮制这场惨案的真凶似乎另有其人,而别有用心的幕后黑手抓走了巴尔 ,只留下杰克一人探明真相。\\r   六发子弹中有一发漏空的子弹是杀手故意放空的。为了了解狙击手的工作,杰克特意来到了狙击手的训练营找到了一个叫做萨缪尔·卡什(罗伯特·杜瓦尔 Robert Duvall 饰)的教练。在卡什和巴尔妹妹以及律师的帮助下,杰克渐渐走进了事件的中心位置,一个关于苏联改造营和俄罗斯黑帮的秘密也慢慢浮出水面……\",\"popularity\":24.634,\"poster_path\":\"/jJX1yrIvT9cmvKb6vcoGiRdPxbD.jpg\",\"release_date\":\"2012-12-20\",\"title\":\"侠探杰克\",\"video\":false,\"vote_average\":6.5,\"vote_count\":5030},{\"adult\":false,\"backdrop_path\":\"/ww1eIoywghjoMzRLRIcbJLuKnJH.jpg\",\"genre_ids\":[28],\"id\":343611,\"original_language\":\"en\",\"original_title\":\"Jack Reacher: Never Go Back\",\"overview\":\"  续集故事继续围绕杰克展开。他重回弗吉尼亚州的军事基地和苏珊·特纳少校会面,要解决一些个人问题。此时,特纳却意外被捕。杰克同时也陷入谜团,因为他被诬告犯有重罪,而且牵涉到一个自己完全不知道的小孩。这些,杰克都记不起来了。他要客服重重困难,去寻找特纳,最终解决问题。\",\"popularity\":24.533,\"poster_path\":\"/wxLUQ1pIms3HAlVGYvEG9zg2kDs.jpg\",\"release_date\":\"2016-10-19\",\"title\":\"侠探杰克:永不回头\",\"video\":false,\"vote_average\":5.7,\"vote_count\":3419}],\"total_pages\":1,\"total_results\":2}";

Root root = JsonConvert.DeserializeObject<Root>(jsonText);

Console.WriteLine(root.results[0].overview);

上面的json进行了压缩并转义,获取了result列表中的第一项。当然如果直接从文件中读取就不用这么麻烦了。

 

 

版权声明:本文由cyhu's essay发布,如需转载请注明出处。

本文链接:https://lovedm.club/?id=113

相关文章

GDAL使用(一)

先开个坑,关于配置什么的有空再写。这里的代码大多参考官网的教程,可能略有改动。下面的代码有打开数据、读取栅格相关信息、读取栅格数据、判断栅格驱动是否支持Create()和CreateCopy()等功能...

递归计算1到x的和

递归真是个神奇的东西,当时学C的时候就没搞明白,学C#又遇到例子了。        public int&nb...

C语言 异或运算符 ^

C语言中异或运算符^表示参见运算的二进制运算符相同为0,不同为1,如下:1 ^ 1 = 01 ^ 0 = 10 ^ 1 = 10 ^ 0 = 0下面举例说明∧运算符的应用:  (1)使特定位翻转  假...

C# 多线程(2)

C# 多线程(2)

Thread类中的join方法:微软官方解释:Join 一个同步方法,该方法阻止调用线程 (即,调用方法的线程) ,直到 Join 调用方法的线程完成。 使用此...

C# 泛型委托

C# 泛型委托

虽然没有必要,但是还是先看看自定义的泛型委托:namespace _20200402 {     class Program &nbs...

C#的类型系统

C#的类型系统

C#的五大数据类型:    类(Class)    结构体(Structures)   &...