C#解析嵌套JSON数组以获取值

C#解析嵌套JSON数组以获取值,c#,arrays,json,C#,Arrays,Json,我已经找了好几个小时,试图让它发挥作用,但我完全没有主意了。我有JSON文本,我正在尝试阅读,但看不到它,请让它工作。下面是JSON文本 [{ “首次播出”:“2018-03-03T01:00:00.000Z”, “插曲”:{ “季节”:3, “数字”:13, “标题”:“警告射击”, “ID”:{ “trakt”:2814272, “tvdb”:6445735, “imdb”:“tt7462514”, “tmdb”:1429184, “tvrage”:0 } }, “表演”:{ “标题”:“盲

我已经找了好几个小时,试图让它发挥作用,但我完全没有主意了。我有JSON文本,我正在尝试阅读,但看不到它,请让它工作。下面是JSON文本

[{ “首次播出”:“2018-03-03T01:00:00.000Z”, “插曲”:{ “季节”:3, “数字”:13, “标题”:“警告射击”, “ID”:{ “trakt”:2814272, “tvdb”:6445735, “imdb”:“tt7462514”, “tmdb”:1429184, “tvrage”:0 } }, “表演”:{ “标题”:“盲点”, “年份”:2015年, “ID”:{ “trakt”:98980, “鼻涕虫”:“盲点”, “tvdb”:295647, “imdb”:“tt4474344”, “tmdb”:62710, “tvrage”:44628 } } }, { “首次播出”:“2018-03-03T01:00:00.000Z”, “插曲”:{ “季节”:2, “数字”:16, “标题”:“吊床+阳台”, “ID”:{ “trakt”:2874663, “tvdb”:6535389, “imdb”:“tt7820776”, “tmdb”:1428050, “tvrage”:0 } }, “表演”:{ “头衔”:“麦基弗”, “年份”:2016年, “ID”:{ “trakt”:107792, “slug”:“macgyver-2016”, “tvdb”:311902, “imdb”:“tt1399045”, “tmdb”:67133, “Tvarge”:{} } }}]

我正在尝试获取“插曲->季节”和“插曲->编号” 这是我一直在使用的代码,也是下面的一把小提琴

    string json = "[{\"first_aired\":\"2018-03-03T01:00:00.000Z\",\"episode\":{\"season\":3,\"number\":13,\"title\":\"Warning Shot\",\"ids\":{\"trakt\":2814272,\"tvdb\":6445735,\"imdb\":\"tt7462514\",\"tmdb\":1429184,\"tvrage\":0}},\"show\":{\"title\":\"Blindspot\",\"year\":2015,\"ids\":{\"trakt\":98980,\"slug\":\"blindspot\",\"tvdb\":295647,\"imdb\":\"tt4474344\",\"tmdb\":62710,\"tvrage\":44628}}},{\"first_aired\":\"2018-03-03T01:00:00.000Z\",\"episode\":{\"season\":2,\"number\":16,\"title\":\"Hammock + Balcony\",\"ids\":{\"trakt\":2874663,\"tvdb\":6535389,\"imdb\":\"tt7820776\",\"tmdb\":1428050,\"tvrage\":0}},\"show\":{\"title\":\"MacGyver\",\"year\":2016,\"ids\":{\"trakt\":107792,\"slug\":\"macgyver-2016\",\"tvdb\":311902,\"imdb\":\"tt1399045\",\"tmdb\":67133,\"tvrage\":null}}}]";
    JArray obj = Newtonsoft.Json.JsonConvert.DeserializeObject<JArray>(json);


    foreach (var result in obj)
    {
        foreach (JObject tvshow in result["episode"])
        {
            string season_num = (string)tvshow["season"];
            string episode_num = (string)tvshow["number"];

            Console.WriteLine(season_num + " - " + episode_num );
        }
    }
(2)第二集“:,,,,,,“情节”部分::,,,,,“情节”部分::,,,,,,,,“季节”3,“数字”编号:13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“slug\”:“Blindspot\”,“tvdb”\“:295647:”:295647,,“imdb\”::“tt4474344 4 4”,tmdb:,“tmdb\”:62710,“Trarage\”:44628}}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“Trarage\,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“show\”:{“title\”:“MacGyver\”,“year\”:2016,,“ids\”:{“trakt\”:107792,“slug\”:“macgyver-2016\”,“tvdb\”:311902,““imdb\”:“tt1399045\”,“tmdb\”:67133,““tvrage\”:null}}}}>”; JArray obj=Newtonsoft.Json.JsonConvert.DeserializeObject(Json); foreach(obj中的var结果) { foreach(结果中的JObject电视节目[“插曲”]) { 字符串季节数量=(字符串)电视节目[“季节”]; 字符串插曲数量=(字符串)电视节目[“数字”]; Console.WriteLine(季数+“-”+集数); } }


感谢任何人能给我的帮助!

您实际上有嵌套对象,因此您需要首先提取
插曲
对象,然后从
插曲
中访问其属性,即
编号
季节
等:

foreach (var result in obj)
{
    var episode = result["episode"];
    Console.WriteLine(episode["season"]);
    Console.WriteLine(episode["number"]);
}
这将打印您尝试执行的结果。以下是更新的fiddle演示:

一种简单的方法是为json设置DTO c类,然后将json结果反序列化到
List

public class Ids
{
    public int trakt { get; set; }
    public int tvdb { get; set; }
    public string imdb { get; set; }
    public int tmdb { get; set; }
    public int tvrage { get; set; }
}

public class Episode
{
    public int season { get; set; }
    public int number { get; set; }
    public string title { get; set; }
    public Ids ids { get; set; }
}

public class Ids2
{
    public int trakt { get; set; }
    public string slug { get; set; }
    public int tvdb { get; set; }
    public string imdb { get; set; }
    public int tmdb { get; set; }
    public object tvrage { get; set; }
}

public class Show
{
    public string title { get; set; }
    public int year { get; set; }
    public Ids2 ids { get; set; }
}

public class Season
{
    public DateTime first_aired { get; set; }
    public Episode episode { get; set; }
    public Show show { get; set; }
}
获取生成的类的一种简单方法是使用Visual Studio功能,该功能可以。 现在,您可以更好地反序列化和访问每个季度的数据:

var seasons = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Season>>(json);

foreach (var season in seasons)
{

    Console.WriteLine(season.episode.title);
    Console.WriteLine(season.first_aired);
    Console.WriteLine(season.episode.season);
    Console.WriteLine(season.episode.number);
}
var seasures=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
foreach(季节中的变量季节)
{
Console.WriteLine(季、集、标题);
控制台。WriteLine(第一季播出);
Console.WriteLine(季、集、季);
Console.WriteLine(季、集、号);
}
您可以在此处播放演示:


你说的“行不通”是什么意思"? 另外,JSON显示季节和数字是数字,而不是字符串。啊,好的,明白了!非常感谢你的帮助,我真的非常感谢!祝你有一个美好的一天:)@ViNSaNiTY我用一种更好的方式添加了更多的细节,而不是玩
JArray
JObject
之类的东西哇,你不必这么做。谢谢你,我理解你所做的,我将从中学到很多。